[英]Python multiprocessing pool inside a loop
我有一个循环,在每次迭代中,都有一些任务应该并行执行。 我需要等待任务在当前迭代中并行运行,然后 go 到下一次迭代。
例如,
a = [1,2,3,4,5,6,7,8,9,10]
pool = Pool(mp.cpu_count())
def fun1(x):
....
def fun2(x):
....
def fun3(x):
....
for x in a:
pool.map(fun1, x)
pool.map(fun2,x)
pool.map(fun3,x)
pool.close()
pool.join()
这是正确的方法吗? 或者我如何实现这一目标?
根据您的评论,您希望为x=1
并行运行fun1, fun2, fun3
,等到它们全部完成,然后继续执行x=2
并重复。 这可以这样实现:
import multiprocessing as mp
a = [1,2,3,4,5,6,7,8,9,10]
def fun1(x):
....
def fun2(x):
....
def fun3(x):
....
for x in a:
# Create separate process for each function
p1 = mp.Process(target=fun1, args=(x))
p2 = mp.Process(target=fun2, args=(x))
p3 = mp.Process(target=fun3, args=(x))
# Start all processes
p1.start()
p2.start()
p3.start()
# Wait till they all finish and close them
p1.join()
p2.join()
p3.join()
或者,如果您想为a
中的所有x
运行fun1
,然后运行fun2
然后fun3
,您可以使用多处理池来代替:
import multiprocessing as mp
a = [1,2,3,4,5,6,7,8,9,10]
pool = mp.Pool(mp.cpu_count())
def fun1(x):
....
def fun2(x):
....
def fun3(x):
....
# Run fun1 for all values in a
pool.map(fun1, a)
# Run fun2 for all values in a
pool.map(fun2, a)
# Run fun3 for all values in a
pool.map(fun3, a)
# Close pool
pool.close()
pool.join()
在多处理pool
情况下,除非pool.map(fun1, a)
完成运行,否则 pool.map( pool.map(fun2, a)
不会运行。 有关 Python 的multiprocessing
模块的更多信息,我强烈建议您阅读文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.