首頁  >  文章  >  後端開發  >  為什麼在 Windows 上使用多重處理時會出現執行階段錯誤?

為什麼在 Windows 上使用多重處理時會出現執行階段錯誤?

Barbara Streisand
Barbara Streisand原創
2024-11-16 10:43:03556瀏覽

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

使用多重處理時在Windows 上出現運行時錯誤

嘗試在Windows 上使用多重處理時遇到“運行時錯誤”表示程式引導存在潛在問題階段。當主模組未使用正確的習慣用法啟動子進程時,通常會發生此錯誤。

要解決此問題,請確保主模組在啟動任何子程序之前包含以下行:

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()

應用的解

應用的解

import parallelTestModule

if __name__ == '__main__':
    extractor = parallelTestModule.ParallelExtractor()
    extractor.runInParallel(numProcesses=2, numThreads=4)
>糾正,在主模組中加入if

name

== '__main__': 保護:透過完成此更改,程式將按預期正確處理子進程,而不會觸發 RuntimeError .

以上是為什麼在 Windows 上使用多重處理時會出現執行階段錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn