gpt4 book ai didi

python - 当卡住为可执行文件时,多处理运行主窗口的新实例

转载 作者:太空狗 更新时间:2023-10-30 01:09:36 25 4
gpt4 key购买 nike

我已经问过了this exact question一年前。我的应用程序使用 Python 的多处理模块,从命令行运行时它工作正常,但是当我使用 Pyinstaller 将它打包为可执行文件时,多个进程作为原始进程的新实例生成,而不是运行它们应该运行的函数。上次给我的建议以及我看到的任何其他地方都是在我的 if __name__ == "__main__": block 的开头调用 multiprocessing.freeze_support() ,我一直在做这件事,但由于某种原因我突然又遇到了这个问题。还有什么可能导致这种情况?

更新:我已经确认 freeze_support() 行的存在根本不会影响这个问题。评论它或取消评论它给出完全相同的行为:主窗口的副本被打开并且坐在那里什么都不做。这是调用它的 block ,在我的主要 Python 模块的最末端:

if __name__ == '__main__':
freeze_support()

# (A bunch of commented-out lines)
main()

最佳答案

我是个傻子。 (好吧,也许不是,但这完全是我的错)多处理通过使用两个额外的参数运行它来向进程发出信号,表明它是一个子进程:标志 --multiprocessing-fork 和一个数字句柄来自父进程的管道。 multiprocessing.freeze_support 检查此标志的存在,以决定是运行为子进程指定的函数,还是运行普通程序。不管怎样,我解析命令行参数的方法改变了 sys.argv,它去掉了标志并导致子进程像新的父进程一样运行。

所以,这个故事的寓意是,永远不要改变 sys.argv我转而使用 optparse,它提示存在标志,所以我不得不向它传递一个经过过滤的参数列表。一旦我这样做了,问题就消失了。

关于python - 当卡住为可执行文件时,多处理运行主窗口的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11802438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com