ホームページ > バックエンド開発 > Python チュートリアル > Windows でマルチプロセッシングを使用すると RuntimeError が発生するのはなぜですか?

Windows でマルチプロセッシングを使用すると RuntimeError が発生するのはなぜですか?

Barbara Streisand
リリース: 2024-11-16 10:43:03
オリジナル
650 人が閲覧しました

Why Am I Getting a RuntimeError on Windows When Using Multiprocessing?

マルチプロセッシングの使用時に 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 サイトの他の関連記事を参照してください。

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