2012-05-29 5 views
9

Ho uno scenario come questo:Come recuperare più valori restituito di una funzione chiamata attraverso multiprocessing.Process

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

Sto cercando di parallelizzare l'intero processo .Something come questo

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

Come faccio a fare in modo ragionevole il compito di

if pdf_output : 
      pdf_output = pdf_output + pdf_output 

Per ogni lavoro? Come posso recuperare i 2 valori di retun inviati da createpdf e lavorarci sopra? Penso che il multiprocessing.Queue sia un indizio, ma come posso implementarlo?

risposta

15

Non hai bisogno di code per un compito così semplice. Consiglierei di usare le piscine. Il metodo Pool.map può applicare una funzione a una serie di valori in parallelo:

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) 
Problemi correlati