1. ホーム
  2. python

[解決済み] Pythonの単純なループを並列化するには?

2022-03-24 05:25:50

質問

些細な質問かもしれませんが、pythonで以下のループを並列化するにはどうしたらよいでしょうか?

# setup output lists
output1 = list()
output2 = list()
output3 = list()

for j in range(0, 10):
    # calc individual parameter value
    parameter = j * offset
    # call the calculation
    out1, out2, out3 = calc_stuff(parameter = parameter)

    # put results into correct output list
    output1.append(out1)
    output2.append(out2)
    output3.append(out3)

Pythonで単一スレッドを開始する方法は知っていますが、結果を "collect"する方法がわかりません。

複数プロセスでも構いませんし、このケースで最も簡単なものであれば何でも構いません。現在Linuxを使用していますが、WindowsやMacでも動作するはずです。

このコードを並列化する最も簡単な方法は何でしょうか?

どのように解決するのですか?

CPython で複数のスレッドを使用すると、グローバルインタープリタロック (GIL) のため、純粋な Python コードではパフォーマンスが向上しません。 私は multiprocessing モジュールで代用できます。

pool = multiprocessing.Pool(4)
out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))

インタラクティブ・インタープリターでは動作しないことに注意してください。

GILにまつわるいつものFUDを避けるために:とにかくこの例でスレッドを使うことには何の利点もありません。 あなたは 欲しい を使うことで、多くの問題を回避できるからです。