2012-10-10 33 views
1

我希望我的Python腳本能夠將其功能之一運行爲子流程。我應該怎麼做?如何讓函數作爲Python中的子進程運行?

這裏是我的意圖的模擬腳本:

#!/urs/bin/env python 

def print_mynumber(foo): 
    """This function is obviously more complicated in my script. 
    It should be run as a subprocess.""" 
    print(foo) 

for foo in [1,2,3]: 
    print_mynumber(foo) # Each call of this function should span a new process. 
    # subprocess(print_mynumber(foo)) 

謝謝您的建議。對我來說,正確地制定問題有點困難,從而進行適當的網絡搜索。

回答

6

使用multiprocessing module

import multiprocessing as mp 

def print_mynumber(foo): 
    """This function is obviously more complicated in my script. 
    It should be run as a subprocess.""" 
    print(foo) 

if __name__ == '__main__': 
    for foo in [1,2,3]: 
     proc = mp.Process(target = print_mynumber, args = (foo,)) 
     proc.start() 

你可能不希望創建一個進程每次調用print_mynumber,特別是如果該列表foo遍歷長。在這種情況下,更好的辦法是使用一個多池:

import multiprocessing as mp 

def print_mynumber(foo): 
    """This function is obviously more complicated in my script. 
    It should be run as a subprocess.""" 
    print(foo) 

if __name__ == '__main__': 
    pool = mp.Pool() 
    pool.map(print_mynumber, [1,2,3]) 

的水池,是默認情況下,將創建n個工作進程,其中N是的CPU(或核心)的數量該機擁有。 pool.map的行爲與Python內置的map命令非常相似,只不過它將任務分配給工作人員池。

相關問題