py2app应用程序正在运行,但Mac OS X显示它没有响应

时间:2015-04-30 01:53:27

标签: python multithreading macos py2app

我有一个生成子线程的python脚本(没有GUI),而父线程阻止应用程序使用此方法完成:

try:
    while True:
        time.sleep(1)
except (KeyboardInterrupt, SystemExit):
    pass
finally:
    cleanup()

当我使用py2app从这个脚本创建一个应用程序并运行它时,它停留在Dock并按预期工作,但是当我右键单击时,它显示“Application Not Responding”(在Activity Monitor中相同)并且完成它我只能选择“强制退出”,之后会生成崩溃报告对话框。

为什么它没有响应,如果原因是sleep(),如何在没有它的情况下保持应用程序打开?

1 个答案:

答案 0 :(得分:3)

它显示为"没有响应"因为它没有回应。 OS X上的应用程序(而不仅仅是简单的" Unix可执行文件" /脚本,代理或守护程序)必须响应来自操作系统的消息。

通常,您使用Cocoa run loop执行此操作。 PyObjC提供了一些high-level helpers,使其更简单,或者只是让您访问Apple文档从Python描述的相同Cocoa方法。

另一种选择是使用脚本包装器,它只运行你的脚本,同时为你维护一个运行循环(有或没有GUI)。

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