9章multiprocessingモジュール

本章を読めば以下の問いに答えられるようになる
  • multiprocessingモジュールは何を提供するのか?
  • プロセスとスレッドの違いは何か?
  • プロセスプールの適切な選択方法は?
  • プロセスを実行するための非永続型キュー(待ち行列)の使い方は?
  • プロセス間通信の得失は何か?
  • 複数のCPUを使ってnumpyのデータを処理する方法は?
  • データの欠損を回避するためにロックする必要があるのはなぜか?

デフォルトのCPythonは複数のCPUを使いません。その理由は、Pythonがシングルコアの時代に設計されたためでもあり、並列処理を効率的に実行するのがとても難しいためでもあります。複数のCPUを使うためのツールがありますが、どれを選ぶのかはユーザーしだいです。長時間実行するプロセスにおいて、マルチコアCPUのうちたったひとつのコアしか活用できないのは苦痛ですから、本章では同時に複数のコアを使う方法を説明します。

[注記]

上記はCPython(ふだん使っているPythonの実装)についての話です。Python言語の仕様にはマルチコアの利用を妨げるものはありません。CPythonの実装はマルチコアを効率的に活用することはできませんが、他の実装(例えばPyPyがソフトウェア・トランザクショナル・メモリを使えるようになると)はこの制約に縛られません。

現在はマルチコアの時代です。ノートPCでも4コアはあたりまえで、デスクトップではまもなく8コアが一般的になるでしょう。サーバーでは10、12、15コアのCPUが利用可能です。それほど手間をかけずにマルチコアのCPU用にジョブを分割することができるのなら、そのような方向性で考えるのが得策です。 ...

Get ハイパフォーマンスPython now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.