問題タブ [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.

0 投票する
3 に答える
11523 参照

python - Python multiprocessing : プロセスを適切に強制終了する

する

プロセスのリストを適切に強制終了しますか?

そうでない場合、それを行う最も簡単な方法は何ですか?

目標は構成ファイルをメモリにリロードすることなので、すべての子プロセスを強制終了し、代わりに他のプロセスを作成します。後者は新しい構成ファイルを読み取ります。

編集while True:ループを実行していることを説明するコードを追加しました

編集:これは@danoの提案後の新しいコードです

コードの良い点は、構成ファイルを編集できることであり、プロセスはその構成もリロードします。

問題は、最初のプロセスのみが実行され、他のプロセスは無視されることです。

編集refresh_time:これは私の命を救いました。while True in schedule() を使用するのは良い考えではないので、代わりにセットアップしました

0 投票する
2 に答える
1139 参照

python - pandas データフレームでのマルチプロセッシング。入力サイズに基づく紛らわしい動作

関数のような df.apply を実装しようとしていますが、データフレームのチャンク全体で並列化されています。次のテストコードを書いて、(データのコピーなどと比較して)どれだけ得られるかを確認しました。

奇妙な動作: N=10^7 の場合、N=10^8 で機能し、エラーが発生します

ここで何が起こっているか知っている人はいますか?また、この並列化の方法に関するフィードバックをいただければ幸いです。個々の行と数百万行ごとに inc または sum よりも時間がかかる関数を期待しています。

ありがとう!

0 投票する
1 に答える
1823 参照

python - ビリヤード マルチプロセッシング モジュールに「if __name__=='__main__'」行が必要なのはなぜですか?

次のコードがある場合:

スクリプトは期待どおりに動作し、「ok!」と出力します。そしてエンディング。しかし、この行を省略しif __name__=='__main__':て次の行のインデントを解除すると、私のマシン (OS X) はおかしくなり、killall Python. ここで何が起こっているのか分かりますか?

(これを重複としてマークしている人には、他の質問が if __name__=='__main__'一般的な目的を尋ねる一方で、ここでそれを使用しないと劇的に予期しない動作が発生する理由を具体的に尋ねていることに注意してください)

0 投票する
1 に答える
12611 参照

python - Python は multiprocessing.pool を使用してメモリを割り当てることができません

私のコード (遺伝的最適化アルゴリズムの一部) は、いくつかのプロセスを並行して実行し、それらすべてが終了するのを待ち、出力を読み取り、別の入力で繰り返します。60回繰り返してテストしたところ、すべて正常に機能していました. うまくいったので、より現実的な繰り返し回数 200 を使用することにしました。次のエラーが表示されました。

プールを使用する私のコードのスニペットは次のとおりです。

RunOne 関数は、私が作成したクラスにオブジェクトを作成し、計算負荷の高い Python パッケージを使用して、約 30 秒かかる化学の問題を解決し、化学ソルバーの出力でオブジェクトを返します。

したがって、私のコードは RunMany をシリアルで呼び出し、RunMany は RunOne をパラレルで呼び出します。私のテストでは、10 個のプロセッサ (コンピューターには 16 個あります) と RunOne への 20 回の呼び出しのプールを使用して RunOne を呼び出しました。つまり、len(arg1)*len(arg2)*len(arg3)=20 です。コードが RunMany を 60 回呼び出したときはすべて正常に機能しましたが、200 回呼び出したときにメモリが不足しました。

これは、一部のプロセスが正しくクリーンアップされていないことを意味しますか? メモリリークはありますか?メモリ リークがあるかどうかを判断するにはどうすればよいですか? また、リークの原因を特定するにはどうすればよいですか? 200 回の繰り返しループで増加している唯一の項目は、0 サイズから 200 の長さまで増加する数値のリストです。作成したカスタム クラスのオブジェクトの辞書がありますが、長さが制限されています。 50 エントリ - ループが実行されるたびに、ディクショナリから項目が削除され、別の項目に置き換えられます。

編集: RunMany を呼び出すコードのスニペットを次に示します。

0 投票する
1 に答える
1207 参照

python - マルチプロセッシング/マルチスレッド - 速度が向上しない - Python

私はマルチプロセッシング/マルチスレッド モジュールが初めてで、プログラムの速度を改善できるかどうかを確認しようとしています。問題は、予期しない値を返すことです。threading.Thread代わりに試してみましたがmultiprocessing.Process、同じ問題が発生しました-別のスレッドを使用しない場合よりも実行が遅くなります。

この例では multiprocessing モジュールを使用しましたが、マルチスレッドを試してもほぼ同じです (違いはコメントにあります) 2 つの関数が順次実行されている時間と、これらの関数が並列に実行されている時間を出力するコードを次に示します。

この例の速度を改善できるかどうか教えていただけますか? 私は何を間違っていますか?

私には考えがあります:より多くのプロセスまたはスレッドに分割するには数秒かかるため、結果を1秒で返さなければならない状況では役に立たないのではないでしょうか?

0 投票する
2 に答える
1965 参照

python - マルチプロセッシング キュー - メモリ消費量が増えるのはなぜですか?

次のスクリプトは、サイズ 100000 の 100 個のランダムな辞書を生成し、各 (キー、値) タプルをキューに送り、1 つの別のプロセスがキューから読み取ります。

メインプロセスがフィードするときにコンシューマープロセスがキューからデータをプルするため、メモリ使用量が一定であると予想していました。キューにデータが溜まらないことを確認しました。

ただし、メモリ消費量を監視したところ、スクリプトが実行されるにつれて増加し続けています。に置き換えるimap_unorderedfor _ in xrange(100): d = get_random_dict()、メモリ消費量は一定になります。説明は何ですか?

0 投票する
1 に答える
364 参照

python - いずれかのプロセスに例外がある場合に、参加しているすべてのプロセスを終了する方法 - Python

私はプロセスのpythonプールを持っています。プロセスのいずれかで例外が発生した場合、プールの実行を終了したいです

プール内のすべてのプロセスに参加したので、参加はすべてのプロセスが終了するのを待ちます。ターゲット関数内で sys.exit(1) を上げると、結合がまだプロセスの完了を待っているため、システムは無限に待機します。

コードで結合を使用しているときに実行を終了する方法