[解決済み] Pythonでサブプロセス、マルチプロセシング、スレッドの使い分けは?
質問
Pythonプログラムを並列化し、実行するマシン上の複数のプロセッサを利用できるようにしたいと考えています。 私の並列化は非常に単純で、プログラムのすべての並列スレッドは独立しており、その出力を別々のファイルに書き出します。 スレッドが情報を交換する必要はありませんが、パイプラインのいくつかのステップがスレッドの出力に依存しているため、スレッドがいつ終了したかを知ることは必須です。
移植性は、私がこれを Mac、Linux、および Windows 上の任意の Python バージョンで実行したい場合に、重要です。これらの制約を考えると、これを実装するために最も適切な Python モジュールはどれでしょうか?私は、スレッド、サブプロセス、およびマルチプロセシングの間で決定しようとしていますが、これらはすべて関連する機能を提供するように見えます。
これについてのどんな考えも? 私は、移植可能な最も単純な解決策を望んでいます。
どのように解決するのですか?
multiprocessing
は、偉大なるスイス軍用ナイフのようなモジュールです。 リモートで計算もできるので、スレッドよりも汎用的です。 したがって、このモジュールを使用することをお勧めします。
は
subprocess
モジュールでも複数のプロセスを起動できるようになりますが、新しいマルチプロセッシングモジュールに比べると使い勝手が悪いと感じました。
スレッドは悪名高く微妙で、CPythonでは、それらで、しばしば1つのコアに制限されます (たとえ、コメントの1つに指摘されているように、グローバルインタープリタロック (GIL) はPythonコードから呼び出されたCコードで解放することができます)。
引用された3つのモジュールの機能のほとんどは、プラットフォームに依存しない方法で使用できると思います。 移植性の面では、以下の点に注意してください。
multiprocessing
は Python 2.6 からしか標準搭載されていないことに注意してください(いくつかの古いバージョンの Python 用のバージョンは存在しますが)。 しかし、これは素晴らしいモジュールです!
関連
-
[解決済み] バイトを文字列に変換する
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] Pythonでスレッドから戻り値を取得する方法は?
-
[解決済み】プロセス実行中にサブプロセスの出力が常に表示される。
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つの機能を同時に実行させる
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] if 節の終了方法
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複