首页 >后端开发 >Python教程 >当在单独的模块中管理线程时,为什么 Python 多处理会在 Windows 上导致运行时错误?

当在单独的模块中管理线程时,为什么 Python 多处理会在 Windows 上导致运行时错误?

Linda Hamilton
Linda Hamilton原创
2024-11-15 08:33:02692浏览

Why Does Python Multiprocessing Cause a RuntimeError on Windows When Threads Are Managed in a Separate Module?

使用 Python 多处理时修复 Windows 上的运行时错误

如果主模块不正确,Python 多处理可能会在 Windows 系统上遇到“运行时错误”配置。错误消息通常建议使用“freeze_support()”函数来纠正此问题。然而,让我们深入研究一个特定的场景,其中线程在单独的模块中管理,导致相同的错误。

代码涉及一个主模块(“testMain.py”),它导入模块处理进程并线程(“parallelTestModule.py”)并调用其“runInParallel”方法。在“parallelTestModule.py”中,进程在“ParallelExtractor”类中定义,该类使用“multiprocessing”模块中的“Process”类初始化进程。

问题的症结在于缺乏主模块(“testMain.py”)中的“if name == '__main__':”守卫。此防护确保子进程不会递归地导入主模块。在 Windows 上执行时,子进程会在开始时执行主模块,从而导致递归循环。

要解决此问题,您需要在主模块(“testMain.py”)中插入此守卫:

import parallelTestModule

if __name__ == '__main__':
    extractor = parallelTestModule.ParallelExtractor()
    extractor.runInParallel(numProcesses=2, numThreads=4)

通过此修改,仅当程序直接运行时主模块才会充当入口点,防止子进程的递归执行并允许多处理正确运行在 Windows 上。

以上是当在单独的模块中管理线程时,为什么 Python 多处理会在 Windows 上导致运行时错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn