Tips

開発Tips(2025-08-30)

このTipsでは、Pythonで複数のタスクを並列に実行することで処理速度を向上させる方法を紹介します。`multiprocessing`モジュールを使用し、CPUコアを最大限に活用することで、特にCPUバウンドな処理において劇的なパフォーマンス改善が期待できます。

Pythonにおける効率的なタスクの並列処理

このTipsでは、Pythonで複数のタスクを並列に実行することで処理速度を向上させる方法を紹介します。multiprocessingモジュールを使用し、CPUコアを最大限に活用することで、特にCPUバウンドな処理において劇的なパフォーマンス改善が期待できます。

Pythonのmultiprocessingモジュールを使った並列処理

multiprocessingモジュールを使うことで、複数のCPUコアを活用した並列処理を実現できます。以下は、Poolオブジェクトを用いた簡単な例です。

import multiprocessing
import time

def worker(num):
    print(f"Worker {num}: starting")
    time.sleep(2)  # 処理時間を模擬
    print(f"Worker {num}: finishing")
    return num * 2

if __name__ == '__main__':
    with multiprocessing.Pool(processes=4) as pool:  # 4コアを使用
        results = pool.map(worker, range(8))  # 8個のタスクを並列実行
        print(f"Results: {results}")

このコードでは、8つのタスクを4つのプロセスに分割して並列実行しています。time.sleep(2)は処理時間を模擬しており、実際にはより複雑な処理を記述します。Pool.mapはタスクをプロセスに均等に割り当て、結果をリストとして返します。

注意点:

  • プロセス間の通信にはオーバーヘッドがあるため、タスクの粒度が小さすぎると並列化による効果が薄れる可能性があります。
  • 共有メモリを扱う際には、適切なロック機構を用いて競合状態を防ぐ必要があります。 multiprocessing.Lockなどを活用しましょう。
  • if __name__ == '__main__': ブロックは、Windows環境でマルチプロセッシングを正しく動作させるために重要です。

おすすめポイント:

CPUバウンドな処理の高速化に非常に有効です。I/Oバウンドな処理には、asyncioなどの非同期処理の方が適している場合が多いです。