返回Python Multiprocessing.Process函数的值

时间:2014-04-28 19:08:32

标签: python process multiprocessing

我试图生成两个相同文件的校验和(在两个不同的目录中)并使用multiprocessing.Process()同时运行两个文件的校验和而不是顺序运行。

但是,当我在校验和生成函数上运行multiprocessing.Process()对象时,我得到了这个返回值:

<Process(Process-1, stopped)> 
<Process(Process-2, stopped)>

这些应该是校验和字符串列表。

生成函数的return语句是:

return chksum_list

非常基本,顺序运行时程序运行良好。

如何检索通过multiprocessing.Process()对象处理的函数的返回值?

感谢。

1 个答案:

答案 0 :(得分:6)

docs在这个主题上相对较好;

<强>管道

您可以通过管道与流程对象进行通信;

来自文档:

from multiprocessing import Process, Pipe

def f(conn):
    conn.send([42, None, 'hello'])
    conn.close()

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()
    p = Process(target=f, args=(child_conn,))
    p.start()
    print parent_conn.recv()   # prints "[42, None, 'hello']"
    p.join()

游泳池&amp;地图

或者,您可以使用Pool个进程:

pool = Pool(processes=4) 
returnvals = pool.map(f, range(10))

其中f是您的函数,它将作用于range(10)的每个成员。 同样,您可以将包含输入的任何列表传入您的流程;

returnvals = pool.map(f, [input_to_process_1, input_to_process_2])    

在您的具体情况下,input_to_process_1/2可能是您正在进行校验和的文件的路径,而f是您的校验和功能。