gpt4 book ai didi

Python 3.4 多处理不适用于 py2exe

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

这与 this question 几乎相同,但那里给出的解决方案(调用 freeze_support())对我不起作用。

我有以下名为 start.py 的脚本,我用它来构建带有 py2exe(版本 0.9.2.2)的独立可执行文件。我在同一目录中也有 python.exe。

import multiprocessing

def main():
print('Parent')
p = multiprocessing.Process(target=new_process)
multiprocessing.set_executable('python.exe')
p.start()
p.join()

def new_process():
print('Child')

if __name__ == '__main__':
multiprocessing.freeze_support()
main()

当作为纯 python 运行时,它工作得很好。但是,当打包为可执行文件时,这是我得到的错误:

Unknown option: --
usage: <path to start.exe> [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.

这明显是调用造成的

python.exe --multiprocessing-fork

如果我不调用 set_executable() 和 freeze_support(),子进程只会启动 exe 并作为 __main__ 运行,导致新进程的无限链打印“Parent”,而“Child”从不打印。

如果我不调用 multiprocessing.set_executable(),调用 freeze_support() 的唯一事情似乎是导致子进程引发以下错误

Traceback (most recent call last):
File "start.py", line 17, in <module>
multiprocessing.freeze_support()
File "C:\Python34\Lib\multiprocessing\context.py", line 148, in freeze_support

freeze_support()
File "C:\Python34\Lib\multiprocessing\spawn.py", line 67, in freeze_support
main()
NameError: name 'main' is not defined

我正在使用在 Windows 8.1 64 位上运行的 Python 3.4 32 位。我已经使用 cx-Freeze 尝试了以上所有内容,结果相同。任何帮助将不胜感激。

编辑:即使使用这个例子straight out of the docs :

from multiprocessing import Process, freeze_support

def f():
print('hello world!')

if __name__ == '__main__':
freeze_support()
Process(target=f).start()

当子进程调用 freeze_support() 时,我得到相同的 NameError。

最佳答案

尝试建议的修复 in the docs :

multiprocessing.set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))

另请注意,您需要在生成任何新进程之前调用它。

关于Python 3.4 多处理不适用于 py2exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29115428/

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