如何检索通过 multiprocessing.Process 调用的函数返回的多个值 [英] How to retrieve multiple values returned of a function called through multiprocessing.Process

查看:46
本文介绍了如何检索通过 multiprocessing.Process 调用的函数返回的多个值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个这样的场景:

for each in content :
     pdf_output,job_id=createpdf(each)
     if pdf_output : 
        pdf_output = pdf_output + pdf_output

我正在尝试并行化整个过程.就像这样

I am trying to parallelize the whole process .Something like this

 jobs=[]
    for each in content : 
       jobs.append(multiprocessing.Process(target=self.createpdf, args=(content)))

    for each in jobs :
         jobs.start()
    for each in jobs :
         jobs.join()

我如何明智地完成

if pdf_output : 
            pdf_output = pdf_output + pdf_output

对于每个工作?如何检索 createpdf 发送的 2 个返回值并对其进行处理?我认为 multiprocessing.Queue 是一个线索,但我该如何实现?

For each job ? How do I retrieve the 2 retun values sent by createpdf and work on it ? I think multiprocessing.Queue is a clue , but how do I implement this ?

推荐答案

对于这样一个简单的任务,您不需要队列.我建议使用池.Pool.map 方法可以将一个函数并行应用于一系列值:

You do not need queues for such a simple task. I would recommend to use pools. The Pool.map method can apply a function to a series of values in parallel:

import multiprocessing
def createpdf(data):
    return ("This is my pdf data: %s\n" % data, 0)


data = [ "My data", "includes", "strings and", "numbers like", 42, "and", 3.14]
number_of_processes = 5
results = multiprocessing.Pool(number_of_processes).map(createpdf, data)
outputs = [result[0] for result in results]
pdfoutput = "".join(outputs)

这篇关于如何检索通过 multiprocessing.Process 调用的函数返回的多个值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆