簡體   English   中英

Python:並行運行n個函數

[英]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.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM