20章並行処理のExecutor
スレッドを批判する人々の多くはシステムプログラマーで、普通のアプリケーションプログラマーなら一生遭遇しないようなユースケースを気にしているのだと思われます。(略)アプリケーションプログラマーにとってのユースケースの99パーセントは、独立のスレッドをいくつか起動して処理を割り振り、結果をキューに集めれば事足りるでしょう。
—— Michele Simionato
Pythonの思索者†1
[†1] Michele Simionatoによる記事『Threads, processes and concurrency in Python: some thoughts』(https://fpy.li/20-1)より。要約として「マルチコアによる(実際には大したことのない)革命への過大評価を取り除き、スレッドやその他の並行処理について(おそらく)有益なコメントを提供する」と書かれています。
この章ではconcurrent.futures.Executor関連のクラス群に着目します。これらはMichele Simionatoの言う通り、独立のスレッドを複数起動して処理結果をキューに集めるというパターンがカプセル化されたしくみです。Executorを使えばこのパターンを苦労なく実現でき、スレッドの代わりにプロセスを利用することも可能です。計算量の多いタスクではプロセスが役立つでしょう。
また、ここではfutureという概念も紹介します。これはJavaScriptでのpromiseと同様に、処理の非同期実行を表すオブジェクトです。ここでの基本的な考え方は、concurrent.futuresだけでなく「21章 非同期プログラミング」で解説するasyncioパッケージの基盤にもなっています。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access