我想學習python中的多處理。我開始閱讀http://www.doughellmann.com/PyMOTW/multiprocessing/basics.html,我無法理解導入目標函數的部分。導入目標函數|多處理
尤其是什麼下列句子的意思..
「包裝在__main__檢查應用程序的主要部分,確保它不會遞歸在每個孩子的導入模塊運行。」
有人可以用一個例子更詳細地解釋這個嗎?
我想學習python中的多處理。我開始閱讀http://www.doughellmann.com/PyMOTW/multiprocessing/basics.html,我無法理解導入目標函數的部分。導入目標函數|多處理
尤其是什麼下列句子的意思..
「包裝在__main__檢查應用程序的主要部分,確保它不會遞歸在每個孩子的導入模塊運行。」
有人可以用一個例子更詳細地解釋這個嗎?
在Windows上,multiprocessing
模塊產生一個新的進程時,導入__main__
模塊。如果生成新進程的代碼不包含在if __name__ == '__main__'
塊中,則導入主模塊將再次產生新進程。等等,無窮無盡。
這個問題也是在題爲"Safe importing of main module".有一節提到的多文檔,你會發現下面的簡單示例:
在Windows上運行此:
from multiprocessing import Process
def foo():
print 'hello'
p = Process(target=foo)
p.start()
導致RuntimeError
。
而解決辦法是使用:
if __name__ == '__main__':
p = Process(target=foo)
p.start()
"""This is my module (mymodule.py)"""
def sum(a,b):
""">>> sum(1,1)
2
>>> sum(1,-1)
0
"""
return a+b
# if you run this module using 'python mymodule.py', run a self test
# if you just import this module, you get foo() and other definitions,
# but the self-test isn't run
if __name__=='__main__':
import doctest
doctest.testmod()
確保腳本正在運行中的交互性 '頂層環境'。
例如,如果您想與用戶進行交互(啓動過程),您需要確保它是主要。
if __name__ == '__main__':
do_something()