問題タブ [python-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 - 子プロセスを終了できません
私はこのコードを持っています:
問題は、プロセスを開始した後にプロセスを終了できないことです。
プロセスを終了できる唯一の方法は、実行することkill <pid>
です。
そのプロセスを終了するにはどうすればよいですか?
python - NumPy でのマルチプロセッシング
問題の解決策を求めてウェブを探しましたが、実際に役立つものは見つかりませんでした。私の問題は、マルチプロセッシングを実装してプログラムを高速化したいということです。関数getSVJJPrice
はかなり高速です。ただし、Kのサイズは約 1000 であるため、コード全体がかなり遅くなります。for
したがって、ループを並列化する方法があるのだろうか?コードは以下にあります。
これを調べてくれた人に感謝します!
よろしくお願いします、
ビクター
python - multiprocessing manager.dict() を使用してオブジェクト インスタンスを共有できません
オブジェクト インスタンスのディクショナリを と共有する際に問題が発生していますmultiprocessing
。dict
によって共有されているを使用manager
しようとしていますが、オブジェクト インスタンスをキーとして使用しようとすると、コピーされます。
これを回避する方法はオブジェクト ID をキーとして使用することだと理解していますが、なぜこのようなことが起こっているのでしょうか? オブジェクト ID を使用することは、問題に対する最善の解決策ですか? manager
dict()
これは、通常の非オブジェクトでは発生しないことに気付きました。
別のアプローチ
のドキュメントでManager()
、問題の一部がサーバーに変更を通知していることを読んだので、コードをこれに変更しましたが、犬が参照されずにコピーされるという同じ問題がまだあります。
python - 呼び出し可能なオブジェクトをプロセスのプールに適用することは可能ですか?
function を呼び出すたびにPool.apply_async
、そのプロセスで実行される関数を渡す必要があります。代わりに呼び出し可能なオブジェクトを渡そうとしましたが、何もしませんでした。それを行う方法はありますか?それとも、自分でプールをゼロから設計する必要がありますか?
コードは次のとおりです。
そんな感じ。
python - Python のマルチプロセッシングで期待どおりの速度が得られない
Python のモジュールを使用してコードを最適化しようとしていmultiprocessing.Pool
ますが、論理的に期待する速度向上の結果が得られません。
私が行っている主な方法は、多数のベクトルと固定された大きな疎行列の行列ベクトル積を計算することです。以下は、私が必要とするものを実行するおもちゃの例ですが、ランダムな行列を使用しています。
メソッドは約30
数秒で終了します。
さて、 の各要素の計算はresults
他の計算の結果に依存しないため、並列計算を行うと処理が高速になると考えるのが自然です。アイデアは、4 つのプロセスを作成することであり、それぞれがいくつかの計算を行う場合、すべてのプロセスが完了するまでにかかる時間は約 1/2 減少するはず4
です。これを行うために、次のコードを書きました。
20
私の問題は、このコードの実行に数秒以上かかること2
です。さらに悪いことに、プールにプロセスが含まれていても、パフォーマンスは向上しません! 8
スピードアップが起こらない理由は何ですか?
注:私の実際の方法はもっと時間がかかり、入力ベクトルはファイルに保存されます。ファイルを分割してから、ファイル4
ごとに個別のプロセスでスクリプトを手動で実行すると、各プロセスはファイル全体の場合の 4 倍の速さで終了します (予想どおり)。このスピードアップ(明らかに可能です)がなぜ起こっていないのか混乱していますmultiprocessing.Pool
Edi : Multiprocessing.Pool により Numpy 行列の乗算が遅くなることがわかりました。この質問は関連している可能性があります。でもチェックしなきゃ。
python - セマフォを待っている間にSIGTERMを受け取った後、Pythonプロセスはどのように正常に終了しますか?
multiprocessing モジュールを使用して、他の 5 つの Python プロセスを生成する Python プロセスがあります。親プロセスを P0 と呼び、その他を P1 ~ P5 と呼びましょう。要件は、SIGTERM を P0 に送信する場合、最初に P1 から P5 をシャットダウンしてから終了することです。
問題は、P1 と P5 がセマフォで待機していることです。したがって、これらのプロセスに SIGTERM を送信すると、プロセスはシグナル ハンドラを呼び出して終了します。しかし、セマフォで待機しているため、例外がスローされます。P0 から P5 が正常に終了できるように、終了前にその例外をキャッチする方法はありますか?
トレースバック:
python - wxPython ウィンドウを閉じるときに Python ウォッチドッグが終了しない
初期化時にウォッチドッグ オブザーバーと Python プロセスを起動する wxPython GUI を含むアプリがあります。
この wx.TaskBarIcon コールバック メソッドを使用して wxPython ウィンドウを閉じています。
DestroyChildProcess は次のとおりです。
BacklogManager はマルチプロセッシング Process サブクラスであることに注意してください。私が抱えている問題は、wxPython GUI ウィンドウを閉じても、Windows タスク マネージャーに 2 つの pythonw.exe プロセスが表示されることです。次の 3 つの可能性があります。
- GUI プロセスを正しく終了していません。(プロセスかどうかは不明)
- ウォッチドッグ オブザーバーを正しく終了していません。
- backlog_manager プロセスを正しく終了していません。
コードをいじってみると、「self.backlog_manager.terminate()」という呼び出しが正しく機能しているように見え、pythonw.exe の 1 つのインスタンスが実行されたままになっています。
すべての pythonw.exe プロセスを正しく終了または停止する方法はありますか? 私は何を間違っていますか?
編集 - さらに調査すると、これは、Python スクリプトを開始するために使用している .bat スクリプトに問題があるようです。コマンドラインウィンドウを非表示にするために、基本的に pythonw.exe と START /B を使用しています。
次のようにスクリプトを開始すると、次のようになります。
コマンド ライン ウィンドウを閉じると、すべての Windows タスク マネージャー プロセスが終了します。これはおそらく pythonw.exe の問題か、プロセスの終了方法に問題があると思われます。
python - マルチプロセス プールをループ内にラップする (プロセス間の共有メモリ)
Python パッケージ「deap」を使用して、遺伝的アルゴリズムを使用した多目的最適化問題を解決しています。関数は非常に高価になる可能性があり、GA の進化的な性質により、すぐに複合化されます。現在、このパッケージには、進化的計算をマルチプロセスで並列化できるようにするためのサポートが含まれています。
ただし、さらに一歩進んで、いくつかの最適化パラメーターに異なる値を使用して、最適化を複数回実行したいと考えています。たとえば、さまざまな重みの値を使用して最適化問題を解きたいと思うかもしれません。
これはループの非常に自然なケースのように思えますが、問題は、すべてのサブプロセスがパラメーターについて認識できるように、これらのパラメーターをプログラムのグローバル スコープ (つまり、「メイン」関数の上) で定義する必要があることです。ここにいくつかの擬似コードがあります:
multiprocessing.Value、multiprocessing のパトス フォークなど、さまざまな可能性を調査しましたが、最終的には、子プロセスが Individual クラスを読み取るときに常に問題が発生します。
私は deap users のグループにこの質問を投げかけましたが、SO ほど大きなコミュニティではありません。さらに、これは deap に関する特定の問題というよりも、一般的な概念的な Python の質問のように思えます。この問題に対する私の現在の解決策は、コードを複数回実行し、毎回パラメーター定義の一部を変更することです。少なくともこの方法でも GA 計算は並列化されますが、必要以上に手作業が必要になります。
アドバイスや提案は大歓迎です!