使用多重处理时在 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中文网其他相关文章!