我有这样的场景:
for each in content :
pdf_output,job_id=createpdf(each)
if pdf_output :
pdf_output = pdf_output + pdf_output
我正在尝试并行化整个过程。像这样的事情
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个retun值并对其进行处理? 我认为multiprocessing.Queue是一个线索,但我该如何实现呢?
答案 0 :(得分:24)
您不需要队列来完成这么简单的任务。我建议使用游泳池。 Pool.map
方法可以将函数并行应用于一系列值:
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)