投稿

[今さら始める Python マスター #16] マルチプロセスと並列処理

Pythonのthreading、multiprocessing、concurrent.futuresを使い分けるための基本を学びます。

[今さら始める Python マスター #16] マルチプロセスと並列処理

並列処理が必要な場面

大量のファイル処理、複数APIの呼び出し、重い計算などでは、処理を分けて進めることで時間を短縮できる場合があります。

スレッド

I/O待ちが多い処理にはスレッドが向いています。

1
2
3
4
from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor() as executor:
    results = list(executor.map(fetch_url, urls))

プロセス

CPUを多く使う計算では、マルチプロセスを検討します。

1
2
3
4
from concurrent.futures import ProcessPoolExecutor

with ProcessPoolExecutor() as executor:
    results = list(executor.map(calculate, values))

使い分け

ネットワーク待ちはスレッド、CPU計算はプロセス、非同期I/Oはasyncioが候補になります。

今日のゴール

並列処理は便利ですが、複雑さも増えます。まずはI/O待ちとCPU計算の違いを理解し、用途に合う方法を選びましょう。

この投稿は投稿者によって CC BY 4.0 の下でライセンスされています。