多步骤多处理:如何保存返回的对象?

2024-09-27 22:23:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉多点感知,有一些非常基本的问题。在

我有三个函数(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()
  1. 我可以合并不同worker返回的字典,但是如何首先保存这些返回值(换句话说,返回对象保存在哪里)?在
  2. 既然p2.start()跟在p1.join()之后,这是否意味着{}将在{}终止后开始?在

Tags: infor字典argsrangestartdictworker
2条回答

看看Python的多处理队列用于合并输出的类。一般的想法是将函数包装在另一个函数中,该函数将每个函数的结果附加到队列中。然后,在函数终止时从队列中拉出。在

请参见Using Queue in python以获得一个像样的示例(使用线程而不是进程的albiet)

http://docs.python.org/2/library/multiprocessing.html#multiprocessing.Queue

(2.)是的,在进程完成之前,程序将不会继续超过join()。在

(1.)您可以使用一个队列或一个数组(用互斥锁来锁定),这样就可以从函数中将返回数据添加到(多处理)队列或数组中(对于数组或非多处理类型,使用锁来确保它们不会同时被访问)。然后可以从队列/数组中读取值。在

相关问题 更多 >

    热门问题