py2app 应用程序正在运行,但 Mac OS X 显示它没有响应
py2app application is working but Mac OS X shows it as not responding
我有一个 python 脚本(无 GUI)生成子线程,而父线程阻止应用程序使用此方法完成:
try:
while True:
time.sleep(1)
except (KeyboardInterrupt, SystemExit):
pass
finally:
cleanup()
当我使用 py2app 和 运行 从这个脚本创建应用程序时,它停留在 Dock 中并按预期工作,但是当我右键单击时,它显示 "Application Not Responding"(相同在 Activity 监视器中)并完成它我只能 select "Force Quit" 这会导致之后出现崩溃报告对话框。
为什么它没有响应,如果原因是 sleep()
,没有它我该如何保持应用程序打开?
它显示为 "not responding" 因为它没有响应。 OS X 上的应用程序(与普通的 "Unix executable"/脚本、代理或守护程序相反)必须响应来自操作系统的消息。
通常情况下,您可以使用 Cocoa run loop. PyObjC offers some high-level helpers 来执行此操作,这会使它变得更简单,或者只允许您访问 Apple 文档在 Python 中描述的相同 Cocoa 方法。
另一种选择是使用仅 运行 脚本的脚本包装器,同时为您维护 运行 循环(有或没有 GUI)。
最后,你真的需要首先成为一个应用程序吗?
我有一个 python 脚本(无 GUI)生成子线程,而父线程阻止应用程序使用此方法完成:
try:
while True:
time.sleep(1)
except (KeyboardInterrupt, SystemExit):
pass
finally:
cleanup()
当我使用 py2app 和 运行 从这个脚本创建应用程序时,它停留在 Dock 中并按预期工作,但是当我右键单击时,它显示 "Application Not Responding"(相同在 Activity 监视器中)并完成它我只能 select "Force Quit" 这会导致之后出现崩溃报告对话框。
为什么它没有响应,如果原因是 sleep()
,没有它我该如何保持应用程序打开?
它显示为 "not responding" 因为它没有响应。 OS X 上的应用程序(与普通的 "Unix executable"/脚本、代理或守护程序相反)必须响应来自操作系统的消息。
通常情况下,您可以使用 Cocoa run loop. PyObjC offers some high-level helpers 来执行此操作,这会使它变得更简单,或者只允许您访问 Apple 文档在 Python 中描述的相同 Cocoa 方法。
另一种选择是使用仅 运行 脚本的脚本包装器,同时为您维护 运行 循环(有或没有 GUI)。
最后,你真的需要首先成为一个应用程序吗?