Python:并行运行n个函数

时间:2016-05-18 16:15:11

标签: python parallel-processing

我想并行调用 N 多个python函数,但我不知道如何解决这个问题。

我已阅读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,...)。这看起来很混乱和单声道。

有没有办法重新执行此代码以并行调用任意数量的函数?

2 个答案:

答案 0 :(得分:2)

您可以将参数传递给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

答案 1 :(得分: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