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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-11-16 10:43:03654ブラウズ

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

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