python - 卡住脚本中的多处理 python

标签 python python-3.x windows multiprocessing cx-freeze

我正在尝试将使用 multiprocessing 的脚本编译成 Windows 可执行文件。起初我遇到了与 Why python executable opens new window instance when function by multiprocessing module is called on windows 相同的问题当我将它编译成可执行文件时。按照接受的答案,我调整了我的脚本,这样

from multiprocessing import freeze_support
# my functions
if __name__ == "__main__":
    freeze_support()
    # my script

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

Error message

我在错误的绿色部分加下划线的地方。具体这一行是指

freeze_support()

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

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()

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

我还会注意到该脚本在编译时确实可以正常工作,但是您必须在生成的每个多进程(相当多)的错误消息上单击“确定”,并且每个错误消息都完全相同。这是否意味着我使用 p.join() 不正确地结束了进程?

我也试过 Python 3.4 multiprocessing does not work with py2exe 的解决方案建议添加

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

你的脚本,但是这会导致脚本形式(甚至还没有编译)的错误:

FileNotFoundError: [WinError 2] The system cannot find the file specified

感谢您的帮助!

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

最佳答案

这似乎已经存在了很长一段时间的问题 - 我发现至少可以追溯到 2014 年。由于它看起来无害,一般建议是通过将 sys.stdout(和 sys.stderr,它在下一行刷新)替换为假。试试这个:

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()

关于python - 卡住脚本中的多处理 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55309421/

相关文章:

python请求错误处理

python - 为什么我的 Django 应用程序可以在本地运行,但不能在 Heroku 上运行?

python - 为什么 setattr(super(), ...) 不等同于 super().__setattr__(...)?

python - 从另一个包中动态导入一个包

windows - 获取 CPU 使用率(以 % 为单位)

python - 如何在 Flask 中调用另一个 View

python - PyLint 消息 : logging-format-interpolation

python - 如何在 Scipy 中实现日志均匀分布?

java - Apache Spark 错误使用 hadoop 将数据卸载到 AWS S3

java - 在 Java 中膨胀 byte[] 时出现问题?