冻结脚本中的多处理python

Ree*_*ner 10 python windows multiprocessing cx-freeze python-3.x

我正在尝试将脚本编译multiprocessing为Windows可执行文件。起初,我遇到了一个问题,为什么当我将多处理模块的功能编译为可执行文件时,在Windows上调用多处理模块的功能时为什么python可执行文件会打开新的窗口实例。按照接受的答案,我调整了脚本,使

from multiprocessing import freeze_support
# my functions
if __name__ == "__main__":
    freeze_support()
    # my script
Run Code Online (Sandbox Code Playgroud)

作为脚本运行时,它再次完美运行。但是,当我编译并运行它时,会遇到:

错误信息

我在错误的绿色部分加了下划线。此特定行是指

freeze_support()
Run Code Online (Sandbox Code Playgroud)

在我的脚本中。此外,在此行上实际上并没有遇到它,但是当我的脚本进入多进程时,它是这样的:

p = multiprocessing.Process(target=my_function, args=[my_list])
p.start()
p1 = multiprocessing.Process(target=my_function, args=[my_list])
p1.start()
p.join()
p1.join()
Run Code Online (Sandbox Code Playgroud)

这是多处理模块中的错误(特别是第148行),还是我误解了所链接的答案,还是其他原因?

我还将注意到该脚本在编译时可以正常工作,但是对于产生的每个多进程(很多),您必须在错误消息上单击“确定”,并且每个错误消息都完全相同。这是否意味着我会以不正确的方式结束流程p.join()

我还尝试了在Python 3.4上的解决方案,不适用于py2exe,建议添加

multiprocessing.set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))
Run Code Online (Sandbox Code Playgroud)

脚本,但这会导致以下脚本形式(甚至尚未编译)出现错误:

FileNotFoundError:[WinError 2]系统找不到指定的文件

谢谢您的帮助!

Frozen_support文档:https://docs.python.org/2/library/multiprocessing.html#multiprocessing.freeze_support

Nat*_*eks 5

This appears to have been a problem for quite some time - I found references going back to 2014, at least. Since it appears to be harmless, the general recommendation is to suppress the error by replacing sys.stdout (and sys.stderr, which is flushed on the next line) with a dummy. Try this:

import os
import sys
from multiprocessing import freeze_support

if __name__ == '__main__':
    if sys.stdout is None:
        sys.stdout = sys.stderr = open(os.devnull, 'w')
    freeze_support()
Run Code Online (Sandbox Code Playgroud)