我是多重访问的新手,并且有一些非常基本的查询。
我有三个可以并行化的函数(fun1(<list>),fun2(<dict>,<int>),fun3(<dict>,<dict>)
)。 fun1
(字典)的输出是fun2
的输入,依此类推。
我必须合并所有正在运行fun1
的工作人员的输出,然后再将其传递给fun2
(同样适用于fun2 -> fun3
转换)。
考虑以下代码:
if __name__=='__main__':
process1=[]
for i in range(args.numcores):
p1=Process(target=fun1, args=(m[i],))
process1.append(p1)
p1.start()
for p in process1:
p.join()
process2=[]
for i in range(args.numcores):
p2=Process(target=fun2, args=(g,j, ))
process1.append(p1)
p2.start()
for p in process2:
p.join()
p2.start()
跟在p1.join()
之后,这是否意味着process2
将在process1
终止后开始?答案 0 :(得分:1)
(2。)是的,您的程序在完成此过程之前不会继续通过join()。
(1.)您可以使用队列或数组(使用互斥锁锁定),这样就可以将返回数据添加到(多处理。)队列或数组中(如果是数组)或非多处理类型,使用锁定以确保不会同时访问它们。然后你可以在之后读取队列/数组中的值。
答案 1 :(得分:1)
查看Python的multiprocessing.Queue类以合并输出。一般的想法是将函数包装在另一个函数中,该函数将每个函数的结果附加到Queue。然后,当函数终止时,从队列中拉出。
请参阅Using Queue in python以获得一个不错的示例(带有线程而不是进程的albiet)
http://docs.python.org/2/library/multiprocessing.html#multiprocessing.Queue