\

Pythonは多くの並列処理の手法を提供していますが、その中でもconcurrent.futuresモジュールは特に強力で使いやすいです。このモジュールはPython3.2から追加され、複数の処理を並列実行するための機能を提供しています。

concurrent.futuresモジュールは、ThreadPoolExecutorProcessPoolExecutorの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を用いた並列処理の基本的な使い方です。この知識を基に、より高度な並列処理のコードを書くことができます。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です