Windows で Python でマルチプロセッシングを使用すると、「RuntimeError: Attempt to start a new process...」が発生するのはなぜですか?

DDD
リリース: 2024-11-19 08:12:03
オリジナル
438 人が閲覧しました

Why Do I Get

Windows での Python マルチプロセッシングのランタイム エラー

Windows オペレーティング システムでマルチプロセッシング コードを実行すると、次のエラー メッセージが表示される場合があります。

RuntimeError:
            Attempt to start a new process before the current process
            has finished its bootstrapping phase.
            This probably means that you are on Windows and you have
            forgotten to use the proper idiom in the main module:
                if __name__ == '__main__':
                    freeze_support()
                    ...
            The "freeze_support()" line can be omitted if the program
            is not going to be frozen to produce a Windows executable.
ログイン後にコピー

エラーの原因

Windows では、マルチプロセッシング モジュールを通じて作成されたサブプロセスは、メイン プロセスの環境を継承します。サブプロセスが起動されると、メイン モジュールのインポートが試行され、コードが再帰的に実行される可能性があります。これを防ぐには、メイン モジュールに if __name__ == '__main__' ガードを追加する必要があります。

解決策

問題を解決するには、メイン モジュールを変更します。

import parallelTestModule

if __name__ == '__main__':    
    extractor = parallelTestModule.ParallelExtractor()
    extractor.runInParallel(numProcesses=2, numThreads=4)
ログイン後にコピー

説明

if __name__ == '__main__' 条件は、コードがメイン モジュールから直接実行されているかどうかをチェックします。この条件が満たされる場合は、スクリプトが別のモジュールによってインポートされていないことを意味します。この場合、コードが再帰的に実行されないことが保証されるため、メイン モジュール内にサブプロセスを安全に作成できます。

以上がWindows で Python でマルチプロセッシングを使用すると、「RuntimeError: Attempt to start a new process...」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート