首頁  >  文章  >  後端開發  >  在 Windows 上使用多處理時,為什麼我會收到「運行時錯誤:在當前進程完成引導階段之前嘗試啟動新進程」?

在 Windows 上使用多處理時,為什麼我會收到「運行時錯誤:在當前進程完成引導階段之前嘗試啟動新進程」?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-21 06:26:10546瀏覽

Why am I getting

Windows 多重處理錯誤:執行時間錯誤

嘗試在Windows 上使用多重處理時,使用者可能會遇到以下錯誤:

RuntimeError:
Attempt to start a new process before the current process
has finished its bootstrapping phase.

出現此錯誤是因為Windows 子程序在初始化時會導入主模組,可能會導致遞歸子程序建立。為了避免這種情況,在主模組中包含 if __name__ == '__main__': 保護至關重要。這可以防止在主模組內建立子程序。

請考慮以下程式碼片段,它示範了這個問題:

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 上使用多處理時,為什麼我會收到「運行時錯誤:在當前進程完成引導階段之前嘗試啟動新進程」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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