マルチプロセッシングの使用時に 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()
適用済み解決策
Windows で RuntimeError を修正するには、メイン モジュールに if name == '__main__': ガードを追加します:
import parallelTestModule if __name__ == '__main__': extractor = parallelTestModule.ParallelExtractor() extractor.runInParallel(numProcesses=2, numThreads=4)
この変更により、プログラムは RuntimeError を引き起こすことなく、意図したとおりにサブプロセスを正しく処理できるようになります。
以上がWindows でマルチプロセッシングを使用すると RuntimeError が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。