簡體   English   中英

在Windows上啟動新進程時,為什么Python的多處理模塊會導入__main__?

[英]Why does Python's multiprocessing module import __main__ when starting a new process on Windows?

我正在為初學者准備一個圖書館,並且正在使用Python中的多處理模塊。 我遇到了這個問題: 導入並使用使用多處理的模塊,而不會在Windows上引起無限循環

例如,假設我有一個模塊mylibrary.py

# mylibrary.py

from multiprocessing import Process

class MyProcess(Process):
    def run(self):
        print "Hello from the new process"

def foo():
    p = MyProcess()
    p.start()

還有一個調用該庫的主程序:

# main.py

import mylibrary

mylibrary.foo()

如果我在Windows上運行main.py ,它將嘗試將main.py導入新進程,這意味着將再次執行代碼,這將導致進程生成的無限循環。 我可以這樣修復它:

import mylibrary

if __name__ == "__main__":
    mylibrary.foo()

但是,這對於初學者來說非常令人困惑,而且似乎沒有必要。 正在創建的新進程mylibrary ,那么為什么不新工藝只需要導入mylibrary 有沒有一種方法可以解決此問題而不必更改main.py

順便說一下,我正在使用Python 2.7。

Windows沒有fork ,因此沒有辦法像現有的那樣進行新的處理。 因此,子進程必須再次運行您的代碼,但是現在您需要一種區分父進程和子進程的方法,而__main__是。

此處的文檔中對此進行了介紹: http : //docs.python.org/2/library/multiprocessing.html#windows

我不知道另一種結構化代碼的方式來避免前叉炸彈效應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM