2012-01-27 55 views

回答

0

在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() 
0
"""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() 
0

確保腳本正在運行中的交互性 '頂層環境'。

例如,如果您想與用戶進行交互(啓動過程),您需要確保它是主要

if __name__ == '__main__': 
    do_something()