ホームページ >バックエンド開発 >Python チュートリアル >Windows でマルチプロセッシングを使用しているときに「RuntimeError: Attempt to start a new process before the current process has completed its bootstrapping Phase」が発生するのはなぜですか?

Windows でマルチプロセッシングを使用しているときに「RuntimeError: Attempt to start a new process before the current process has completed its bootstrapping Phase」が発生するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-21 06:26:10611ブラウズ

Why am I getting

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。