Pythonでは、queueモジュールとconcurrent.futuresモジュールを使用して、複数のスレッドやプロセス間で情報を安全に交換することができます。

queueモジュール

queueモジュールは、マルチプロデューサ、マルチコンシューマキューを実装しています。このモジュールは、スレッド間で情報を安全に交換するために特に有用です。queueモジュールは、FIFOキュー、LIFOキュー、優先度キューの3種類のキューを実装しています。

concurrent.futuresモジュール

concurrent.futuresモジュールは、Python3.2から追加され、複数の処理を並列実行するための機能を提供します。このモジュールは、複数のスレッド・プロセスを扱うことを目的としています。

並行処理の例

以下に、concurrent.futuresモジュールとqueueモジュールを使用した並行処理の例を示します。

from concurrent.futures import ThreadPoolExecutor
from queue import Queue
import time

def task(v):
    print(f"{v} start")
    time.sleep(1.0)
    print(f"{v} end")
    return v * 2

def main():
    q = Queue()

    # タスクをキューに追加
    for i in range(5):
        q.put(i)

    with ThreadPoolExecutor(max_workers=2) as executor:
        futures = []
        while not q.empty():
            v = q.get()
            futures.append(executor.submit(task, v))

    # タスクの結果を取得
    for future in futures:
        print(future.result())

if __name__ == "__main__":
    main()

このコードでは、ThreadPoolExecutorを使用してタスクを並列に実行し、queueモジュールのQueueクラスを使用してタスクを管理しています。各タスクは1秒間スリープした後、その値の2倍を返します。main関数では、5つのタスクをキューに追加し、それらを並列に実行しています。最後に、各タスクの結果を表示しています。

このように、Pythonのqueueモジュールとconcurrent.futuresモジュールを組み合わせることで、複数のタスクを効率的に並列処理することができます。

投稿者 admin

コメントを残す

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