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)。

最后,你真的需要首先成为一个应用程序吗?