Pythonで簡単に「並列処理」を行う
参考:Pythonにおける並行・並列処理について調べてみた - okigaki_log
マルチプロセス化は,multiprocessingモジュール(標準ライブラリ)を使うことで実現できます.しかし,プロセスの制御が難しく初めて学ぶには敷居が高いです.
この記事では,標準ライブラリに含まれる concurrent.features にあるProcessPoolExecutorを利用してマルチプロセス化を実現します.
以下はサンプルプログラムです.
import time
from concurrent.futures import ProcessPoolExecutor, as_completed
def my_sleep(i: int):
print(f"begin {i}")
# i秒間の待機
time.sleep(i)
print(f"end {i}")
return f"ok {i}"
def main():
# max_workersが同時に存在するプロセス数.
# 未指定の場合は自動でCPUコア数から決定される.
with ProcessPoolExecutor(max_workers=3) as executor:
# プロセスの一覧を保持するためのPoolリスト
process_pool = []
for i in range(2, 8):
# 並列で実行したい関数を呼び出す
# 引数の数が増えた場合はiのうしろにつなげていく
my_process = executor.submit(my_sleep, i)
# Poolへ発行したプロセスを追加
process_pool.append(my_process)
# 処理を終えたプロセスから結果を出力していく.
for p in as_completed(process_pool):
print(p.result())
if __name__ == "__main__":
main()
以下は実行例です.
$ python a.py
begin 2
begin 3
begin 4
end 2
begin 5
ok 2
end 3
begin 6
ok 3
end 4
begin 7
ok 4
end 5
ok 5
end 6
ok 6
end 7
ok 7
参考資料: