首页 > 后端开发 > Python教程 > 为什么在 Windows 上使用多重处理时会出现运行时错误?

为什么在 Windows 上使用多重处理时会出现运行时错误?

Barbara Streisand
发布: 2024-11-16 10:43:03
原创
670 人浏览过

Why Am I Getting a RuntimeError on Windows When Using Multiprocessing?

使用多重处理时在 Windows 上出现运行时错误

尝试在 Windows 上使用多重处理时遇到“运行时错误”表示程序引导存在潜在问题阶段。当主模块未使用正确的习惯用法启动子进程时,通常会发生此错误。

要解决此问题,请确保主模块在启动任何子进程之前包含以下行:

if __name__ == '__main__':
    freeze_support()
登录后复制

代码示例

考虑以下简化的代码片段,尝试在 Windows 上的单独模块中利用多处理:

testMain.py(主模块)

import parallelTestModule

extractor = parallelTestModule.ParallelExtractor()
extractor.runInParallel(numProcesses=2, numThreads=4)
登录后复制

parallelTestModule.py(单独模块)

import multiprocessing
from multiprocessing import Process
import threading

class ThreadRunner(threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self)
        self.name = name
    def run(self):
        print(self.name, '\n')

class ProcessRunner:
    def runp(self, pid, numThreads):
        mythreads = []
        for tid in range(numThreads):
            name = "Proc-"+str(pid)+"-Thread-"+str(tid)
            th = ThreadRunner(name)
            mythreads.append(th) 
        for i in mythreads:
            i.start()
        for i in mythreads:
            i.join()

class ParallelExtractor:    
    def runInParallel(self, numProcesses, numThreads):
        myprocs = []
        prunner = ProcessRunner()
        for pid in range(numProcesses):
            pr = Process(target=prunner.runp, args=(pid, numThreads)) 
            myprocs.append(pr) 
        for i in myprocs:
            i.start()

        for i in myprocs:
            i.join()
登录后复制

应用的解决方案

纠正 RuntimeError Windows,在主模块中添加 if name == '__main__': 保护:

import parallelTestModule

if __name__ == '__main__':
    extractor = parallelTestModule.ParallelExtractor()
    extractor.runInParallel(numProcesses=2, numThreads=4)
登录后复制

通过完成此更改,程序将按预期正确处理子进程,而不会触发 RuntimeError .

以上是为什么在 Windows 上使用多重处理时会出现运行时错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板