問題タブ [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 - マルチプロセッシングを使用しているときにスタックトレースを取得する最良の方法は何ですか?
multiprocessing モジュールを介して実行される関数内で例外が発生した場合に、スタック トレースを取得する最良の方法について疑問に思っています。次に例を示します。
これは以下を出力します:
そのため、有用なスタック トレースがなく、非常に面倒です。これに対する私の現在の解決策:
すべての定型コードなしでこの動作を取得する方法はありますか? そうでない場合、この機能を含めない理由は何ですか?
編集:定型コードにデコレータを使用できますが、そのようなデコレータが標準ライブラリに含まれているかどうかはわかりませんか?
python - マルチプロセッシングによる Python VM のインスタンスの起動が多すぎる
バックグラウンド タスクを実行するプロセスを生成するマルチプロセッシング コード (Python 2.6.4、WinXP) を作成しています。いくつかの些細な例で遊んでいると、固定数を生成するように指示しただけなのに、コードが新しいプロセスを継続的に生成するという問題に遭遇しています。
プログラム自体は正常に動作しますが、Windows タスク マネージャーを見ると、新しい 'python.exe' プロセスが表示され続けます。プログラムが実行されるにつれて、それらはますます生成され続けます(最終的には私のマシンを飢えさせます)。
たとえば、
以下のコードは 2 つの python.exe プロセスを起動すると予想します。1 つ目はプログラム自体で、2 つ目はそれが生成する子プロセスです。私が間違っていることは何ですか?
python - Pythonマルチプロセッシングを素朴に使用するとどのような問題が発生しますか?
新しい(Python 2.6)マルチプロセッシングモジュールを使用するために、バックエンドから分離された方法で分離された複雑なGUIを使用して大規模なアプリケーションをリファクタリングすることを検討しています。GUI /バックエンドインターフェイスは、メッセージオブジェクトが双方向で交換されるキューを使用します。
私が今結論したことの1つは(暫定的ですが、遠慮なく確認してください)、「オブジェクトID」はマルチプロセッシングインターフェイス全体で保持されないということです。現在、GUIがメッセージをバックエンドに公開すると、属性として結果が添付された同じメッセージが返されることを期待しています。オブジェクトID(if received_msg is message_i_sent:
)を使用して、返されるメッセージを識別する場合があります...これはマルチプロセッシングでは機能しない可能性があります。
この質問は、実際の使用で見た、またはマルチプロセッシングモジュールを単純に使用する場合、特に既存のシングルプロセスアプリケーションのリファクタリングで遭遇する可能性があるこのような「落とし穴」を尋ねることです。あなたの答えが実際の経験に基づいているかどうかを指定してください。問題の使用可能な回避策を提供するためのボーナスポイント。
編集:この質問の私の意図は一般的な問題の説明を集めることでしたが、私は2つの間違いを犯したと思います:最初からコミュニティウィキにしました(評判ポイントを取得しないため、おそらく多くの人がそれを無視します) 、そして私はあまりにも具体的な例を含めました-私は答えに感謝しますが-おそらく多くの人々が一般的な応答の要求を見逃したでしょう。私はおそらく、新しい質問でこれを言い換えて、もう一度尋ねます。今のところ、私が含めた特定の例に関連する限り、質問を閉じるためだけに1つの答えを受け入れるのが最善です。答えてくれた人たちに感謝します!
python - マルチプロセッシング使用時の奇妙な unpickling エラー
マルチプロセッシングを使用すると、次のエラーが発生します。
Cレベルで何かがおかしいように聞こえますが、これが何を意味するのかまったくわかりません。誰でもこれに光を当てることができますか?
更新:わかりましたので、これを修正する方法を見つけました。しかし、私はまだ少し困惑しています。私はこのクラスのインスタンスを返しています:
このオブジェクトのインスタンスを返すと、エラーが発生します。ただし、to_dict
辞書を呼び出して返すと、機能します。私は何を間違っていますか?
python - Python: コア ロジック プロセスから GUI プロセスを分離する
コンピュータ シミュレーションを扱うPython プロジェクトを開発しており、そのための GUI も開発しています。(コア ロジック自体は GUI を必要としません。) 私が使用する GUI ツールキットは wxPython ですが、私の質問はそれに依存しないほど一般的だと思います。
GUI が現在動作する方法は、GUI とgarlicsim
同じプロセスおよび同じスレッドでコア ロジック パッケージ (と呼ばれる) を開始することです。これは機能しますが、問題のあるアプローチであることは理解しています。なぜなら、コア ロジックが難しい計算を行う必要がある場合、GUI がハングするためです。これは受け入れられないと考えています。
私は何をすべきか?
GUI とは別のプロセスでコア ロジックを起動するオプションがあると聞きました。これは興味深いように聞こえますが、これについて多くの質問があります。
multiprocessing
パッケージまたはパッケージを使用しsubprocess
て新しいプロセスを起動しますか?- GUI プロセスからシミュレーション データに簡単にアクセスするにはどうすればよいですか? 結局のところ、それは他のプロセスに保存されます。ユーザーは、シミュレーションのタイムラインを簡単かつスムーズに閲覧できる必要があります。これはどのように行うことができますか?
python - threading.Lock over multiprocessing.Lockを使用する理由はありますか?
threading.Lock
ソフトウェアプロジェクトがマルチプロセッシングがバックポートされたバージョンのPythonをサポートしている場合、それを使用する理由はありますmultiprocessing.Lock
か?multiprocessing
ロックもスレッドセーフではないでしょうか?
さらに言えば、そこにある同期プリミティブを使用する理由はありthreading
ますmultiprocessing
か?
multithreading - マルチプロセスWebサーバーとマルチスレッドWebサーバー?
Webサーバーをマルチスレッドにする理由を知りたいのですが
マルチプロセスのWebサーバーにする代わりに...。
レガシーの問題が原因ですか.....
理論的な理由だけでなく、実際的な理由も聞きたい
python - プロセスがすでに実行されているかどうかを検出し、それと協力する
たとえば、5 つのプロセスのプロセス プールを開始し、何らかの操作を実行して終了するが、5 つのプロセスを開いたままにするプログラムを作成しようとしています。後でユーザーはプログラムを再度実行でき、新しいプロセスを開始する代わりに、既存の 5 を使用します。基本的に、これはプロデューサー/コンシューマー モデルです。
- プロデューサーの数はさまざまです。
- 消費者の数は一定です。
- プロデューサは、さまざまなプログラムやさまざまなユーザーによって、さまざまな時点で開始できます。
現在 Python 2.6.4の組み込みmultiprocessing
モジュールを使用していますが、最終的には 3.1.1 に移行する予定です。
基本的な使用シナリオは次のとおりです。
- 初期状態 - 実行中のプロセスはありません。
- ユーザーが開始
program.py operation
- 1 つのプロデューサー、5 つのコンシューマーが実行中。 - 操作が完了しました - 5 つのコンシューマーが実行されています。
- ユーザーが開始
program.py operation
- 1 つのプロデューサー、5 つのコンシューマーが実行中。 - ユーザーの開始
program.py operation
- 2 つのプロデューサー、5 つのコンシューマーが実行中。 - 操作が完了しました - 1 つのプロデューサー、5 つのコンシューマーが実行中です。
- 操作が完了しました - 5 つのコンシューマーが実行されています。
- ユーザーが開始
program.py stop
して完了 - 実行中のプロセスはありません。 - ユーザーが開始
program.py start
して完了 - 5 つのコンシューマーが実行中。 - ユーザーが開始します
program.py operation
- 1 つのプロキュサー、5 つのコンシューマーが実行されます。 - 操作が完了しました - 5 つのコンシューマーが実行されています。
- ユーザーが開始
program.py stop
して完了 - 実行中のプロセスはありません。
私が抱えている問題は、どこから始めればよいかわからないことです。
- コンシューマー プロセスが実行されていることを検出します。
- 以前は無関係なプログラムからそれらへのアクセスを取得します。
- クロスプラットフォームの方法で 1 と 2 を実行します。
それができるようになると、プロセスを管理する方法がわかります。Firefox が Firefox の複数のインスタンスが実行されるのを防ぐためにこれを行うのを見たので、既存のプロセスを検出するための信頼できる方法が必要ですが、Python でそれを行う方法がわかりません。
python - 別のプロセスを監視する (svn)
リポジトリのリストからソース コードをダウンロードするための Python スクリプトがあります。それらのいくつかは大きいです。
チェックアウトの途中で svn がハングアップすることがあります。svn プロセスを監視する方法はありますか?
python - multiprocessing.ProcessサブクラスはLinuxで機能しますが、Windowsでは機能しません
Windowsでpython-gaspを動作させようとしていますが、動作さimport gasp; gasp.begin_graphics()
せると次のトレースバックが返されます。
Windows XPでこのエラーが発生するのに、Ubuntu Linux 9.04では発生しない理由はありますか?
それが役立つ場合は、 (defscreen.updater
)のインスタンスのように見えます。問題のファイルはhttp://bazaar.launchpad.net/~gasp-dev/gasp-core/main/annotate/head%3A/gasp/backend.pyにありますUpdater(multiprocessing.Process)