Skip to main content
 首页 » 编程设计

python之返回函数 Python Multiprocessing.Process 的值

2025年05月04日17haluo1

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

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

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

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

生成函数的返回语句是:

return chksum_list 

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

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

谢谢。

请您参考如下方法:

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

游泳池和 map

或者,您可以使用进程的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 是您的校验和函数。