Pythonは多くの並列処理の手法を提供していますが、その中でもconcurrent.futures
モジュールは特に強力で使いやすいです。このモジュールはPython3.2から追加され、複数の処理を並列実行するための機能を提供しています。
concurrent.futures
モジュールは、ThreadPoolExecutor
とProcessPoolExecutor
の2つのクラスを提供しています。これらはそれぞれスレッドとプロセスを用いた並列処理を可能にします。
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
ThreadPoolExecutor
はスレッドを使って並列タスクを実行します。ネットワークアクセスなどCPUに負荷がかからない処理の並列実行に適しています。一方、ProcessPoolExecutor
はプロセスを使って並列タスクを実行します。CPUに負荷がかかる計算処理などの並列実行に適しています。
以下に、ThreadPoolExecutor
を用いた並列処理の基本的なコードを示します。
from concurrent.futures import ThreadPoolExecutor
import time
def task(v):
print(f"{v} start")
time.sleep(1.0)
print(f"{v} end")
return v * 2
with ThreadPoolExecutor(max_workers=2) as executor:
futures = [executor.submit(task, i) for i in range(5)]
results = [f.result() for f in futures]
print(results)
このコードでは、5つのタスクを作成し、それらを2つのスレッドで並列に実行しています。各タスクは1秒間スリープした後、入力値を2倍にして返します。executor.submit
メソッドでタスクを追加し、Future.result
メソッドでタスクの結果を取得しています。
以上がPythonとconcurrent.futures
を用いた並列処理の基本的な使い方です。この知識を基に、より高度な並列処理のコードを書くことができます。