[英]Python: running n number of functions in parallel
我想並行調用N個python函數,但是不確定如何執行此操作。
我已經閱讀了該線程,並且已經實現了一些代碼。
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等)。 這看起來很雜亂,令人難以置信。
有沒有辦法重新執行此代碼以並行調用任意數量的函數?
您可以將參數傳遞給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
您可以使用multiprocessing.Pool.map
或imap
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.