1

根據python多進程的docs,進程的產卵需要位於if __name__ == '__main__':子句的內部,以防止產生無限進程。在主腳本之外使用python多進程

我的問題是否可以在導入中使用多進程? 讓我們說我有這個PY這是主要的執行文件:

import foo 

def main(): 
    foo.run_multiprocess() 

if __name__ =='__main__': 
    main() 

和進口的foo.py文件:

def run_multiprocess(number_to_check): 
    if number_to_check == 5: 
     print(number_to_check) 

if __name__ == '__main__': 
    list_to_check = {1,2,3,4,5,6,7} 
    pool = Pool(processes=4)    
    pool.map(process_image, list_to_check) 

Obviusly

沿着這類似的規定這將不起作用,因爲foo.py中的if語句中的代碼不會運行。有沒有辦法讓它工作?

回答

1

多處理不必在__main__塊中運行,__main__塊僅在通過python filename.py運行時才使用。

所以,如果你這樣做:

m1.py

from multiprocessing import Pool  
def f(x): 
    return x^2 

def f2(): 
    p = Pool(5) 
    p.map(f, [1,2,3,4,5]) 

m2.py

from m1 import f2 

def __main__(): # this is not required, but a good practice 
    f2() # this would run multiprocessing code 

,然後調用python m2.py,您的代碼將正常運行,具有熔點。

+0

據我所知,當你從'm1導入f2'時,它會創建一個新的過程。在Windows上,它會將原始進程的所有字段複製到新進程。在創建新進程的同時,它也會再次執行'from m1 import f2'這一行,因爲它不在'__main__'子句中,它會一次又一次地創建一個新進程* – Curtwagner1984

相關問題