Python 多进程中的函数返回值

1 投票
1 回答
1323 浏览
提问于 2025-04-18 04:38

我正在尝试生成两个相同文件的校验和(它们在不同的文件夹里),并且我使用了multiprocessing.Process()来同时运行这两个文件的校验和计算,而不是一个接一个地运行。

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

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

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

生成函数的返回语句是:

return chksum_list

这个过程很简单,当按顺序运行时,程序运行得很好。

我该如何获取通过multiprocessing.Process()对象处理的函数的返回值呢?

谢谢。

1 个回答

6

关于这个话题,文档写得比较好;

管道

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

根据文档:

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就是你的校验和函数。

撰写回答