2012-05-29 24 views
9

Tôi có một kịch bản như thế này:Làm thế nào để lấy lại nhiều giá trị trở lại của một hàm gọi qua multiprocessing.Process

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

Tôi cố gắng để parallelize toàn bộ quá trình .Something như thế này

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

Làm cách nào để tôi hợp lý thực hiện nhiệm vụ của

if pdf_output : 
      pdf_output = pdf_output + pdf_output 

Đối với mỗi công việc? Làm thế nào để lấy lại 2 giá trị retun được gửi bởi createpdf và làm việc trên nó? Tôi nghĩ rằng đa xử lý.Queue là một đầu mối, nhưng làm thế nào để tôi thực hiện điều này?

Trả lời

15

Bạn không cần hàng đợi cho một tác vụ đơn giản như vậy. Tôi khuyên bạn nên sử dụng hồ bơi. Phương pháp Pool.map có thể áp dụng hàm cho một loạt các giá trị song song:

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) 
Các vấn đề liên quan