1. ホーム
  2. python

[解決済み] Pythonでサブプロセス、マルチプロセシング、スレッドの使い分けは?

2022-08-19 07:21:55

質問

Pythonプログラムを並列化し、実行するマシン上の複数のプロセッサを利用できるようにしたいと考えています。 私の並列化は非常に単純で、プログラムのすべての並列スレッドは独立しており、その出力を別々のファイルに書き出します。 スレッドが情報を交換する必要はありませんが、パイプラインのいくつかのステップがスレッドの出力に依存しているため、スレッドがいつ終了したかを知ることは必須です。

移植性は、私がこれを Mac、Linux、および Windows 上の任意の Python バージョンで実行したい場合に、重要です。これらの制約を考えると、これを実装するために最も適切な Python モジュールはどれでしょうか?私は、スレッド、サブプロセス、およびマルチプロセシングの間で決定しようとしていますが、これらはすべて関連する機能を提供するように見えます。

これについてのどんな考えも? 私は、移植可能な最も単純な解決策を望んでいます。

どのように解決するのですか?

multiprocessing は、偉大なるスイス軍用ナイフのようなモジュールです。 リモートで計算もできるので、スレッドよりも汎用的です。 したがって、このモジュールを使用することをお勧めします。

subprocess モジュールでも複数のプロセスを起動できるようになりますが、新しいマルチプロセッシングモジュールに比べると使い勝手が悪いと感じました。

スレッドは悪名高く微妙で、CPythonでは、それらで、しばしば1つのコアに制限されます (たとえ、コメントの1つに指摘されているように、グローバルインタープリタロック (GIL) はPythonコードから呼び出されたCコードで解放することができます)。

引用された3つのモジュールの機能のほとんどは、プラットフォームに依存しない方法で使用できると思います。 移植性の面では、以下の点に注意してください。 multiprocessing は Python 2.6 からしか標準搭載されていないことに注意してください(いくつかの古いバージョンの Python 用のバージョンは存在しますが)。 しかし、これは素晴らしいモジュールです!