17

私はこのようなシナリオを持っています:

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が手がかりだと思いますが、これを実装するにはどうすればよいですか?

4

1 に答える 1

37

このような単純なタスクにはキューは必要ありません。プールを使用することをお勧めします。この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)
于 2012-05-29T12:55:41.650 に答える