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

标签 python multithreading macos py2app

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

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

当我使用 py2app 从该脚本创建应用程序并运行它时,它停留在 Dock 中并按预期工作,但是当我右键单击时,它显示“应用程序未响应”(与事件监视器中相同)并且完成后我只能选择“强制退出”,这会导致随后出现崩溃报告对话框。

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

最佳答案

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

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

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

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

关于python - py2app 应用程序正在运行,但 Mac OS X 显示它没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29957709/

相关文章:

python - 如何在 Python 的 json 文件中将键与嵌套级别连接起来?

python - 我正在尝试使用python中的TCP创建客户端服务器模型以进行文件共享。

macos - 如何减少 Docker 在 MacOS 中使用的空间?

objective-c - 在终端中使用 "defaults"命令写出复杂的内容

python - sys.path 包括 py.test rootdir 以相对于项目根目录进行测试导入

python - 动态访问 Pandas 数据框列

c# - 取消 token 源和嵌套任务

java - 在java中制作我自己的事件的正确方法是什么

c++ - C++ 中 mt19937 的平台依赖状态?

python - PyTorch 函数中的下划线后缀是什么意思?