我想并行调用 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,...)。这看起来很混乱和单声道。
有没有办法重新执行此代码以并行调用任意数量的函数?
答案 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.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