2012-05-29 9 views
9

Tengo un escenario como este:Como recuperar múltiples valores devueltos de una función llamada a través multiprocessing.Process

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

Estoy tratando de poner en paralelo todo el proceso .Something como esto

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

¿Cómo realizo la tarea de

if pdf_output : 
      pdf_output = pdf_output + pdf_output 

¿Para cada trabajo? ¿Cómo recupero los 2 valores de retun enviados por createpdf y trabajo en él? Creo que el multiprocesamiento.Queue es una pista, pero ¿cómo implemento esto?

Respuesta

15

No necesita colas para una tarea tan simple. Yo recomendaría usar piscinas. El método Pool.map puede aplicar una función a una serie de valores en paralelo:

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) 
Cuestiones relacionadas