멀티프로세싱을 사용할 때 Windows에서 RuntimeError
Windows에서 멀티프로세싱을 사용하려고 시도하는 동안 "RuntimeError"가 발생하면 프로그램의 부트스트래핑에 잠재적인 문제가 있음을 나타냅니다. 단계. 이 오류는 일반적으로 기본 모듈이 적절한 관용구를 사용하지 않고 하위 프로세스를 시작할 때 발생합니다.
이 문제를 해결하려면 하위 프로세스를 시작하기 전에 기본 모듈에 다음 줄이 포함되어 있는지 확인하세요.
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에서 RuntimeError가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!