2014-04-28 206 views
1

我试图生成两个相同的文件(在两个不同的目录中)的校验和,并且我正在使用multiprocessing.Process()同时而不是按顺序运行两个文件的校验和。函数的返回值Python Multiprocessing.Process

然而,当我上的校验和生成函数运行multiprocessing.Process()对象,我得到这个返回值:

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

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

从生成函数的返回语句是:

return chksum_list 

非常基本和连续运行时,程序运行良好。

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

谢谢。

回答

4

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() 

游泳池&地图

或者,您也可以使用的过程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是您的校验和功能。

+0

是的我一直在审查文档,但无法找到有关从Process对象中正在处理的函数获取返回值的任何信息。 我想从该函数返回一个变量的返回值(字符串列表)。然后将迭代完成主函数内的另一个任务。 感谢您的帮助。 – user3582642