2016-05-18 159 views
0

我想調用N並行的python函數的數量,但不知道如何去做這件事。Python:並行運行n個函數

我已閱讀this thread並已經實施了一些代碼。

from multiprocessing import Process 
def func1(): 
    print 'func1: starting' 
    for i in xrange(10000000): pass 
    print 'func1: finishing' 

def func2(): 
    print 'func2: starting' 
    for i in xrange(10000000): pass 
    print 'func2: finishing' 

def runInParallel(*fns): 
    proc = [] 
    for fn in fns: 
    p = Process(target=fn) 
    p.start() 
    proc.append(p) 
    for p in proc: 
    p.join() 

if __name__ == '__main__': 
    runInParallel(func1, func2) 

這就是上面鏈接的代碼。我已經適應了這些代碼,可以毫無問題地處理我的情況。

所以用這段代碼,我明顯可以同時運行兩個函數。我可以手動添加更多的功能,(func1,func2,func3,func4,...)。這似乎是混亂和不合理的。

有沒有辦法重新做這個代碼來並行調用任意數量的函數?

+0

看看這個其他結束後得到的結果,也許是有用的: [發佈](HTTP:/ /stackoverflow.com/questions/7207309/python-how-can-i-run-python-functions-in-parallel) –

+0

@ Carlo1585是的,這是我鏈接到的帖子。從那裏我想出瞭如何並行運行多個函數......但如果我想並行運行20個函數,我不想爲20個函數編寫代碼。我希望能夠調用一個函數20次,但並行。 –

回答

1

您可以將參數傳遞給Process類(docs)例如:

p = Process(target=func, args=('func1',)) 

func樣子:

def func(name): 
    print '%s: starting' % name 
    for i in xrange(10000000): pass 
    print '%s: finishing' % name 

作爲一個側面說明,你可能想使用Thread代替Process - 請參閱此處比較:https://stackoverflow.com/a/3046201/419115

0

您可以使用multiprocessing.Pool.mapimap

from multiprocessing import Pool 

def f(x):     # the function to be executed in parallel 
    for i in xrange(10000000): pass 

pool = Pool(processes=4)  # 4 worker processes 
print pool.map(f, range(20)) # 20 jobs, a list will be returned when all are finished 

或者你可以只要他們使用

for result in pool.imap(f, range(20)) 
    print result