Python 다중 처리를 시도하는 Windows의 RuntimeError

| | | | | | | | | | | | | | | | | | | |

저는 Windows 시스템에서 스레딩 및 멀티프로세싱을 사용하는 최초의 공식 파이썬 프로그램을 시도하고 있습니다. python이 다음 메시지를 표시하면서 프로세스를 시작할 수 없습니다. 문제는 main 모듈에서 내 스레드를 시작하지 않는다는 것입니다. 스레드는 클래스 내의 별도 모듈에서 처리됩니다.

편집: 그런데 이 코드는 우분투에서 잘 실행됩니다. Windows에서는 그렇지 않음

RuntimeError: 현재 프로세스가 부트스트랩 단계를 완료하기 전에 새 프로세스를 시작하려고 시도합니다. 이것은 아마도 당신이 Windows를 사용하고 있고 메인 모듈에서 적절한 관용구를 사용하는 것을 잊었다는 것을 의미합니다: if __name__ == "__main__": freeze_support() ... 프로그램이 다음과 같은 경우 "freeze_support()" 줄을 생략할 수 있습니다. Windows 실행 파일을 생성하기 위해 동결되지 않습니다. 

내 원래 코드는 꽤 길지만 코드의 요약 버전에서 오류를 재현할 수 있었습니다. 두 개의 파일로 나뉩니다. 첫 번째는 기본 모듈이며 프로세스/스레드를 처리하고 메서드를 호출하는 모듈을 가져오는 것 외에는 거의 수행하지 않습니다. 두 번째 모듈은 코드의 핵심 부분입니다.


testMain.py:

import parallelTestModule extractor = parallelTestModule.ParallelExtractor () extractor.runInParallel(numProcesses=2, numThreads=4) 

parallelTestModule.py:

가져오기 multiprocessing에서 multiprocessing 가져오기 프로세스 가져오기 스레딩 클래스 ThreadRunner(threading.Thread): """ 이 클래스는 실행 중인 스레드의 단일 인스턴스를 나타냅니다.""" def __init__(self, name): threading.Thread.__init__(self) self.name = name def run(self): print self.name," " 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 = 범위 내 PID에 대한 ProcessRunner()(numProcesses): pr = Process(target=prunner.runp, args=(pid, numThreads)) myprocs.append(pr) # if __name__ == "parallelTestModule": #이것은 작동하지 않았습니다 # if __name__ == "__main__": # 이것은 분명히 작동하지 않습니다 # multiprocessing.freeze_support() # myprocs: i.start() for i in myprocs: i.join에서 i에 대해 아무 소용이 없다는 오류를 본 후 추가됨 ()