我不熟悉多点感知,有一些非常基本的问题。在
我有三个函数(fun1(<list>),fun2(<dict>,<int>),fun3(<dict>,<dict>)
)可以并行化。fun1
(字典)的输出是fun2
等的输入。在
在传递给fun1
之前,我必须合并运行fun1
的所有worker的输出(类似于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()
之后,这是否意味着{
看看Python的多处理队列用于合并输出的类。一般的想法是将函数包装在另一个函数中,该函数将每个函数的结果附加到队列中。然后,在函数终止时从队列中拉出。在
请参见Using Queue in python以获得一个像样的示例(使用线程而不是进程的albiet)
http://docs.python.org/2/library/multiprocessing.html#multiprocessing.Queue
(2.)是的,在进程完成之前,程序将不会继续超过join()。在
(1.)您可以使用一个队列或一个数组(用互斥锁来锁定),这样就可以从函数中将返回数据添加到(多处理)队列或数组中(对于数组或非多处理类型,使用锁来确保它们不会同时被访问)。然后可以从队列/数组中读取值。在
相关问题 更多 >
编程相关推荐