首页 > 解决方案 > pyinstaller、多处理和 QT5 的组合导致新的 GUI 窗口和崩溃

问题描述

我有一个运行良好的 python QT5 项目,除了少数情况下一个函数运行很长时间只是为了在大多数情况下返回 false。如果最终跳过该功能对我来说并不重要,因为我的程序无论如何都在运行启发式算法,我可以承受失去这些边缘情况。

该程序被 pyinstaller 制成可执行文件,并且运行良好。以下问题出现在可执行版本中,在spyder中运行时不会出现。日志记录不会显示任何错误,因此显然也不例外。

我正在使用此代码段进行超时:

        manager = multiprocessing.Manager()
        return_dict = manager.dict()
        p = multiprocessing.Process(target=worker_function, args=(a,Pakete,return_dict))
        p.start()
        p.join(10) #timeout after 10 seconds
        if p.is_alive():
            p.terminate()
            p.join()

运行可执行文件,其设置通常会在一分钟内完成程序并且绝对不会在超时部分停留超过 10 秒(因此不应该发生超时)会产生奇怪的行为。

我在 GUI 中开始计算,GUI 冻结并打开另一个 GUI。新的 GUI 功能齐全,并产生相同的错误。

我没有全局 try-catch-restart,所以不可能。

我无法提供一个可行的示例,因为我完全不知道如何小规模地复制它。

多处理以及 pyqt 和 pyinstaller 是否存在任何已知问题?任何可行的解决方法?我可以从哪里开始寻找问题的任何想法?在我看来,这种行为甚至不应该是可能的,因此在这些包中的任何一个深处都必须隐藏一些依赖/行为。

标签: pythonpyqt5pyinstallerpython-multiprocessing

解决方案


推荐阅读