Windows マルチプロセッシング エラー: RuntimeError
Windows でマルチプロセッシングを利用しようとすると、次のエラーが発生する場合があります:
RuntimeError: Attempt to start a new process before the current process has finished its bootstrapping phase.
このエラーは、Windows サブプロセスが初期化時にメイン モジュールをインポートするために発生し、潜在的に再帰的なサブプロセスの作成。これを回避するには、メイン モジュールに if __name__ == '__main__': ガードを含めることが重要です。これにより、メイン モジュール内からサブプロセスを作成できなくなります。
次のコード スニペットを考えてみましょう。 issue:
testMain.py:
import parallelTestModule extractor = parallelTestModule.ParallelExtractor() extractor.runInParallel(numProcesses=2, numThreads=4)
ParallelTestModule.py:
import multiprocessing from multiprocessing import Process class ParallelExtractor: def runInParallel(self, numProcesses, numThreads): myprocs = [] for pid in range(numProcesses): pr = Process(target=self.runp, args=(pid, numThreads)) myprocs.append(pr) for i in myprocs: i.start() for i in myprocs: i.join()
このエラーを解決するには、testMain.py スクリプトを変更して if __name__ == '__main__' を含めます。 Guard:
import parallelTestModule if __name__ == '__main__': extractor = parallelTestModule.ParallelExtractor() extractor.runInParallel(numProcesses=2, numThreads=4)
この変更により、サブプロセスが再帰的に作成されなくなり、Windows マシン上の RuntimeError が解決されます。
以上がWindows でマルチプロセッシングを使用しているときに「RuntimeError: Attempt to start a new process before the current process has completed its bootstrapping Phase」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。