首頁  >  文章  >  後端開發  >  當在單獨的模組中管理執行緒時,為什麼 Python 多處理會在 Windows 上導致執行時期錯誤?

當在單獨的模組中管理執行緒時,為什麼 Python 多處理會在 Windows 上導致執行時期錯誤?

Linda Hamilton
Linda Hamilton原創
2024-11-15 08:33:02601瀏覽

Why Does Python Multiprocessing Cause a RuntimeError on Windows When Threads Are Managed in a Separate Module?

使用Python 多處理時修復Windows 上的運行時錯誤

如果主模組不正確,Python 多處理可能會在Windows 系統上遇到「運行時錯誤」配置。錯誤訊息通常建議使用“freeze_support()”函數來修正此問題。然而,讓我們深入研究一個特定的場景,其中線程在單獨的模組中管理,導致相同的錯誤。

程式碼涉及一個主模組(“testMain.py”),它導入模組處理程序並執行緒(“parallelTestModule.py”)並呼叫其“runInParallel”方法。在「parallelTestModule.py」中,進程在「ParallelExtractor」類別中定義,該類別使用「multiprocessing」模組中的「Process」類別初始化進程。

問題的癥結在於缺乏主模組(「testMain.py」)中的「if name == '__main__':」守衛。此防護確保子程序不會遞歸地導入主模組。在 Windows 上執行時,子程序會在開始時執行主模組,導致遞歸迴圈。

要解決此問題,您需要在主模組(“testMain.py”)中插入此守衛:

import parallelTestModule

if __name__ == '__main__':
    extractor = parallelTestModule.ParallelExtractor()
    extractor.runInParallel(numProcesses=2, numThreads=4)

通過此修改,僅當程式直接運行時主模組才會充當入口點,防止子程序的遞歸執行並允許多處理在Windows 上正確運行。

以上是當在單獨的模組中管理執行緒時,為什麼 Python 多處理會在 Windows 上導致執行時期錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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