問題タブ [multiprocessing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 単純なカウンターを実装するPythonマルチプロセッシングの簡単な方法は?
こんにちは、私は現在Pythonでマルチプロセッシングを使用しています。そして、あるタスクの処理が完了したときに各プロセスがインクリメントできる単純なカウンター変数が存在するかどうか疑問に思っています(合計でどれだけの作業が行われたかのようなものです)。
Value の API を調べましたが、可変だとは思わないでください。
python - Python マルチプロセッシング終了エラー
Ctrl-C を押してアプリを終了すると、これが表示されます
私は自分のものの上にツイストを使用しています。
次のコードでシグナルCtrl-Cを登録しました
そして、彼らが他の人にシャットダウンするように合図すると、それはうまくシャットダウンするように彼らに伝えようとします
私のすべてのプロセスが何らかの形で、
このエラーは何ですか?特定のスレッドのインスタンスが複数ある場合にのみ取得します。
python - WindowsおよびLinuxでのCPUバウンド作業のPythonマルチプロセッシングとスレッド化
そこで、スレッド化と比較して、マルチプロセッシング モジュールが CPU バウンドの作業でどのようにスケーリングするかを確認するために、いくつかのテスト コードを作成しました。Linux では、期待どおりのパフォーマンスの向上が得られます。
私のデュアル コア MacBook Pro は同じ動作を示します。
次に、Windows マシンで試してみたところ、非常に異なる結果が得られました。
マルチプロセッシング アプローチが Windows で非常に遅いのはなぜですか?
テストコードは次のとおりです。
locking - (Apacheプリフォークに基づいて)複数のプロセス間でソケットを共有するaccept()
私はApacheのMPMプリフォークサーバーでモデル化されたいくつかのPythonコードに取り組んでいます。私はネットワークプログラマーというよりもアプリケーションプログラマーであり、スティーブンスを読んでから10年が経ちました。そのため、コードの理解に慣れようとしています。
Sander Temmeによる、Apacheのプリフォークコードがどのように機能するかについての簡単な説明を見つけました。
通常rootとして実行される親プロセスは、ソケット(通常はポート80または443)にバインドします。ソケットのオープンファイル記述子を継承する子を生成し、uidとgidを非特権ユーザーとグループに変更します。子は、リスナーファイル記述子のポーリングセットを作成し(複数のリスナーがある場合)、その上でのアクティビティを監視します。アクティビティが見つかった場合、子はアクティブなソケットでaccept()を呼び出し、接続を処理します。それが完了すると、ポーリングセット(またはリスナーファイル記述子)の監視に戻ります。
複数の子がアクティブであり、それらはすべて同じソケットファイル記述子を継承しているため、同じポーリングセットを監視します。ミューテックスを受け入れると、実際にポーリングセットを監視できるのは1人の子だけになり、アクティブなソケットが見つかると、ミューテックスのロックが解除され、次の子がポーリングセットの監視を開始できるようになります。リスナーが1つしかない場合、そのaccept mutexは使用されず、すべての子がaccept()でハングします。
これは私が見ているコードの動作とほぼ同じですが、いくつかのことを理解していません。
1)「子供」と「リスナー」の違いは何ですか?私が見ているコードには、それぞれの子がリスナーであると思いましたが、Temmeの説明では、「単一のリスナー」と「子」が存在する可能性があります。子供にはいつ複数のリスナーがいますか?
2)(1に関連)これはプロセスごとのミューテックスですか、それともシステムミューテックスですか?さらに言えば、なぜミューテックスがあるのですか?accept(2)は、すべてのリスナーにわたって独自のミューテックスを実行しませんか?私の調査によると、ミューテックスが必要であり、ミューテックスはシステム全体に存在する必要があります。(群れ、セマフォなど)
Temmeは続けて次のように述べています。
子供は、最後にリクエストを処理したときに共有メモリ領域(スコアボード)に記録します。MaxSpareServersを満たすために、アイドル状態の子が親プロセスによって強制終了される場合があります。アイドル状態の子が少なすぎる場合、親はMinSpareServersを満たすために子を生成します。
3)この実装(できればPython)に適したリファレンスコードはありますか?PerlのNet::Server :: Preforkを見つけました。これは、スコアボードに共有メモリの代わりにパイプを使用します。ランダル・シュワルツの記事を見つけました。これは、プリフォークのみを実行し、スコアボードは実行しません。
Perl Cookbookのpre-forkの例には、selectに関するロックはありません。また、Chris SiebenmannのPythonの例では、Apacheに基づいていますが、共有メモリではなくスコアボードにペアのソケットを使用し、コントロールにソケットを使用しています。与えられた子を'a'cceptに制御します。これは、Apacheの説明とはまったく一致しません。
python - 再生可能なキューを使用したマルチプロセッシング
マルチプロセッシングキューを使用するPythonでプログラムを作成する方法を理解しようとしています。
複数のサーバーがあり、そのうちの1つがこれをリモートでキューに提供します:
ここで、デュアル Xeon、クアッド コア サーバーを使用して、このリモート キューからジョブを処理したいと考えています。ジョブは互いに完全に独立しています。したがって、8 つのコアがある場合、キューからジョブを選択して処理し、次のジョブに戻る 7 つのプロセスを開始したいと考えています。7 つのプロセスのそれぞれがこれを行いますが、このプログラムの構造について頭を悩ませることはできません。
これの基本的な構造について、知識のあるアイデアを教えてくれる人はいますか?
前もって感謝します。
python - Windows での一括ファイル/変換操作のための Python マルチプロセッシング
新しいサブディレクトリのディレクトリを監視し、ループ内の各サブディレクトリに作用する python スクリプトを作成しました。これらのサブディレクトリを作成する外部プロセスがあります。各サブディレクトリ内には、テキスト ファイルと多数の画像があります。テキスト ファイルには、画像ごとに 1 つのレコード (行) があります。サブディレクトリごとに、スクリプトはテキスト ファイルをスキャンし、いくつかの外部プログラムを呼び出します。1 つは空白の画像 (カスタム exe) を検出し、次に「mogrify」(ImageMagick の一部) を呼び出して画像のサイズを変更して変換し、最後に 7 を呼び出します。 -zip は、変換されたすべての画像とテキスト ファイルを 1 つのアーカイブにパッケージ化します。
スクリプトは正常に実行されますが、現在はシーケンシャルです。各サブディレクトリを一度に 1 つずつループします。これはデュアル CPU マシン (合計 8 コア) で実行されているため、マルチプロセッシングを実行する良い機会になると思います。
特定のサブディレクトリの処理は、他のすべてのサブディレクトリから独立しています...それらは自己完結型です。
現在、os.listdir() への呼び出しを使用してサブディレクトリのリストを作成し、そのリストをループしています。サブディレクトリごとのコード (変換など) をすべて別の関数に移動してから、各サブディレクトリを処理する別のプロセスを何らかの方法で作成できると思います。私は Python に少し慣れていないので、そのようなマルチプロセッシングにアプローチする方法についていくつかの提案をいただければ幸いです。Python 2.6 を実行している Vista x64 を使用しています。
python - マルチプロセッシングのデバッグ手法
マルチプロセス アプリケーションのデバッグに問題があります (具体的には、Python のマルチプロセッシング モジュールでプロセス プールを使用しています)。明らかなデッドロックがあり、何が原因なのかわかりません。スタック トレースは、マルチプロセッシング モジュールのコードのみを表示するため、問題を説明するには不十分です。
Python ツール、またはデッドロックのデバッグに使用される一般的な手法はありますか?
python - マルチプロセッシングの RPC、設計上の問題
multiprocessing.Process で rpc を実行する良い方法は何ですか?
また、プロセス A * 10、プロセス B * 1 のアーキテクチャに関する設計アドバイスも受け付けています。各プロセス A は、特定のアイテムを照会する必要があるかどうかをプロセス B に確認する必要があります。
そこで、すべての As に対して multiprocessing.Pipe() オブジェクトを実装し、B にそれぞれをリッスンさせることを考えていました。しかし、Multiprocessing.Pipe.recv が BLOCKING であることがわかりました。そのため、どうすればこれを行うことができるのか本当にわかりません。(ループを使用して、ループがブロックされる相手側から送信されたものを確認する場合)。
ツイストを使用するための提案がありますが、ツイストでこれを行う方法がわかりません: すべてのプロセス A から各 pipe.handler に defer を作成し、recv() が何かを受け取ると、それが続行されます。特定のルーチンを完了しますか?私は個人的にツイストがマルチプロセッシングとうまく混ざらないことを知っていますが、マルチプロセッシング実装の子プロセスであるツイストでいくつかのテストを行い、今回は実行可能だと思います。
推奨事項はありますか?
python - Pythonでマルチプロセッシング優先キューを実装するには?
Pythonでマルチプロセッシング優先キューを実装する方法に精通している人はいますか?
python - Pythonデーモンでマルチプロセッシングモジュールを使用中にエラーが発生しました
Pythonデーモンプロセス内でマルチプロセッシングモジュールを使用すると(python-daemonを使用)、次のエラーが発生します。
デーモンプロセス(親)は、多数のプロセス(子)を生成し、定期的にプロセスをポーリングして、プロセスが完了したかどうかを確認します。親は、プロセスの1つが完了したことを検出すると、そのプロセスを再開しようとします。この時点で、上記の例外が発生します。プロセスの1つが完了すると、マルチプロセッシングモジュールを含むすべての操作でこの例外が生成されるようです。デーモン以外のPythonスクリプトで同じコードを実行すると、エラーなしで実行されます。
編集:
サンプルスクリプト