問題タブ [multiprocess]
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 - ノーズマルチプロセスの問題
ノーズテストの実行に問題があります。Run As>Python unit-test
テスト ランナーを に設定し、Eclipse 環境設定のNose test runner
引数を使用して Eclipse からスイートを実行すると、4 つの新しい Python プロセスがスピンアップし、19 個のテスト (クラス) の結果が返されます。最初は 6 つのテストをディスパッチし、2 つ目は 13) を数分で作成します (テストはそれぞれ一連の REST 呼び出しを行い、その後いくつかの検証を行います) 。ただし、コマンドラインから同じファイルを実行すると、--verbosity=2 --processes=2 --process-timeout=300
PyDev>PyUnit
object
nosetests --processes=2 --verbosity=2 --process-timeout=300 testfile.py
、それはグループに編成されているように見える何百もの新しい Python プロセスを生成します。1 つのメモリ使用量は 6k を少し超え、他のプロセスは 50 ~ 500k です。これらのプロセスは無期限に生成され続け、手動でプロセスを強制終了し始めるまでテストは完了しません。マルチプロセッシングを使用せずにコマンド ラインからテストを実行すると、問題なく完了します。
Eclipse は、テスト プロセスの余分な囲い込みを行っていますか? Eclipse とコマンド ラインで異なるバージョンの Nose を実行している可能性はありますか (サイト パッケージに 1 つのノーズ インストールしか表示されませんが)。
python - プロセスクラスとプールクラスは同じワーカーを共有していますか?
マップリデュースっぽいETLを実行しているPythonスクリプトがあります。私はコードの創始者ではありませんが、いくつかの改善のためにその実行時間を分析/診断するために働いています。
パッケージでは、「プロセス」を使用します。
これは、CDNから新しいファイルを抽出するための完全なFTPループを実行し、FTPコードを含めることはできませんが、質問に関連するものではありません。
コードの後半で、Pool
いくつかの非同期関数を実行するワーカーのインスタンスを作成します。
繰り返しになりますが、その中の基礎となるコードは、まだコードが含まれていないと私が思う質問とは無関係であるはずです。
私の質問は、Pythonで、ワーカーを作成するPool
と、そこにあるワーカーは?と「共有」されるのProcess
でしょうか。
つまり、最初にプロセスで1つのワーカーを作成し、後でプールクラスでワーカーを作成するときに、ループが戻ってプロセスに登録されている関数を実行しようとすると、以前に作成されたワーカーが使用されます。 ?
または、代わりに、各クラスインスタンスがスポーンしたワーカーのみを参照できるようにすることで、「ホットサイドホットサイドとコールドサイドコールド」を維持しますか(Process
以前に作成した1つのワーカーを再利用しPool
、指定されたワーカーを引き続き使用しますProcess
。によって生成されたワーカーPool
)。
c - マルチプロセスシグナル処理プログラムでの奇妙な結果
9つのプロセスで構成されるこのマルチプロセスプログラムがあります。1 つは、3 つのシグナル生成プロセスと 4 つのシグナル処理プロセスを生成するメイン プロセスです。1つは監視プロセスです。ここで、SIGUSR1 と SIGUSR2 の 2 つのシグナルを使用しました。各ハンドラーは、SIGUSR1 または SIGUSR2 のいずれかを処理できます。シグナルを受信するたびに、共有メモリ内のシグナル SIGUSR1 および SIGUSR2 のカウントを 1 増やします。シグナルはプロセス グループに送信されるため、監視プロセスもシグナルを受信します。両方のシグナルを処理でき、ローカルシグナルカウントを 1 増やします。10 に達するたびに、共有メモリ内の SIGUSR1 と SIGUSR2 のカウントの値を出力します。
このオプションはメイン プログラムにあり、30 秒間実行してプログラムを終了することができます。この場合、sleep(30) を実行してからプログラムを終了します。2 番目のケースでは、共有メモリ内の SIGUSR1 と SIGUSR2 の合計数をカウントしながら、while ループでビジー状態で待機します。100000 に達すると、プログラムを終了します。
2つのバージョンの私の出力は次のとおりです
100000秒版の場合
100000信号版出力用
30秒バージョンの場合
共有メモリの初期化
2番目のケースで結果が遅れるのはなぜですか。つまり、モニターが最初に出力を出力したとき、処理スレッドによって記録された SIGUSR1 と SIGUSR2 のカウントは、すでに 93 と 222 に達していました。また、シグナルはプロセス グループに送信されます。したがって、各シグナルは 2 つのハンドラーと 1 つのモニターによって処理されます。ハンドラーの場合は 2 つだけです。4 つのハンドラーのうち 2 つが SIGUSR1 を処理し、他のシグナルを無視し、その逆も同様であるためです。
したがって、sleep(30) を実行して結果を確認すると、何が問題なのかがわかります。あらゆる洞察。これを何日もデバッグしようとしていますが、まだ成功していません。
python - Python スレッド - コンパイル中にネットワークをリッスンする
Python(2.6.6)では、スレッド/プロセスがネットワーク(メッセージキュー)を同時に作業(コンパイル)しながらチェックする最良の方法は何ですか。メッセージ キューでコマンドを受信した場合、コンパイル スレッドを強制終了して生成できる必要があります。
python - Djangoマルチプロセッシングの奇妙さ
./manage.pyシェルを使用してコードを実行しているときに、理解できないことがありました。
p.start()
プロセスで実行したり、他の変数を設定したりする機会はありません。インスタンス化時に実行されるようです。ビューでコードを使用しようとすると、複数のプロセスがまったく生成されないように見えます。すべてが1つのコアに残ります。
私は何を間違っているのですか、それとも誤解していますか?manage.py processphoto
マルチコアサーバーを最大限に活用するために、別々のプロセスで別々のコマンドを生成したいと思います。
python - Python は、execv を使用して stdin/stdout をリダイレクトします
私はpythonをos.fork
子の進行状況に使用os.execv
しており、子の進行状況で別のプログラムを実行するために使用しています。子プログラムで I/O をリダイレクトするにはどうすればよいですか。これを試しましたが失敗しました。
ながらtest.py
:
python - マルチスレッドのpsycopg2とpythonが結果を返さない
親プロセスにDB接続があり、各子プロセスにpython 2.6とpsycopg2を使用した独自のDB接続(コンストラクターで作成)があるプログラムがあります。
5秒ごとに、親プロセスはDBにクエリを実行して、子プロセスの進捗レポートを取得します。各子プロセスはXのことを実行し、それがどのステップにあるかをDBに保存します。
以下にコードの簡略版を載せました
子プロセス内では、以下を呼び出します。
データベース(psql)の外部クエリは、クエリがプログラムで実行されているときに正しい結果を返していることを示しています。ただし、プログラムではそうではありません。time.sleep呼び出しの後にDBを再初期化するようにプログラムを変更すると、正しい出力が得られます。なんで?
c - Mutexロックスレッド
マルチスレッド/プロセスプログラミングは初めてです。これが私が明確にする必要があることです。
コードを処理する
上記の擬似コードで、sharedResource
ミューテックスのロックが解除されていない場合、プロセスBはアクセスできますか?
プロセスBからsharedResourceに正しくアクセスするにはどうすればよいですか?
ミューテックス、スレッド、プロセス間の関係を説明する明確な視覚的な図はありますか?