使用多重處理時在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()
應用的解
應用的解
import parallelTestModule if __name__ == '__main__': extractor = parallelTestModule.ParallelExtractor() extractor.runInParallel(numProcesses=2, numThreads=4)>糾正,在主模組中加入if
name
== '__main__': 保護:透過完成此更改,程式將按預期正確處理子進程,而不會觸發 RuntimeError .以上是為什麼在 Windows 上使用多重處理時會出現執行階段錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!