問題タブ [pathos]
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 - ネストされた階層的パトス マルチプロセッシング マップを実行する方法は?
ディルのシリアライゼーション/ピッキングでコードの大部分を構築したので、pathos マルチプロセッシングを使用して計算を並列化しようとしています。Pathos それはディルの自然な拡張です。
ネストして実行しようとすると
other の中ProcessingPool().map
で、私は受け取ります:
例えば:
収量
私はamap(...).get()
成功せずに使用してみました。これはpathos 0.2.0にあります。
ネストされた並列化を許可する最良の方法は何ですか?
アップデート
私はこの時点で正直にならなければなりません。そして、私はその主張"daemonic processes are not allowed to have children"
を哀れみから取り除いたことを告白しなければなりません。KeyboardInterrupt
また、それらのワーカーとワーカーに カスケードするものを構築しました...以下のソリューションの一部:
コンソールと IPython ノートブック (停止ボタン付き) から動作するようですが、すべてのコーナー ケースで 100% 正しいかどうかはわかりません。
python - Pathos 処理プールの再帰制限
パトスと並列化しようとしているタスクがあります。非並列バージョンを実行すると、正常に実行されます。ただし、1 プロセスの pathos プールを実行すると、RuntimeError: maximum recursion depth exceeded が発生します。
例えば:
このエラーが発生する理由をデバッグしようとして、1 つのオブジェクトのリストをマッピングしようとしました。これはマルチプロセッシングなしで機能します
t1.getValue
適用される高価な関数はどこにありますか。同じ2つの引数に適用されるこれらのexpesive関数の完全なリストがあります. これが並列処理の出番です。ただし、次のエラーがスローされます。
興味深いのは、getValue
再帰的でないことです。これは、スタック制限に達したときに時々発生することを知っています。
getValue
マルチプロセッシングを機能させるエラーの原因となっているのはどの部分かを特定するにはどうすればよいですか? この時点からこれをデバッグする方法がわからないため、行き詰まっています。データをプロセスに渡すときの酸洗エラーが実際に原因である可能性はありますか? getValue
舞台裏でいくつかの大きな構造を処理します。
python-2.7 - pathos.multiprocessing の使用中に cPickle エラーが発生しましたか?
マルチプロセッシングを使用して、パンダのExcelの読み取りを高速化しようとしています。ただし、マルチプロセッシングを使用すると、エラー cPickle.PicklingError: Can't pickle : attribute lookup __builtin__.function failed が発生します
次を実行しようとすると: import dill from pathos.multiprocessing import ProcessPool
pathos.multiprocessing はこの問題を解決するように設計されていませんか? ここで何かを見落としていますか?
編集:完全なエラーコードのトレース
linux - Pathos: Linux でスポーンを強制する
Windows で動作する Python コードがありますが、Linux で実行するとハングします。私は JPype を使用しているので、複数の共有プロセスが同じパイプを使用して Java にアクセスしようとすると、問題が発生する可能性があると思われます (異なるプロセスが作成されますが、JPype 行でハングします)。Pathos でスポーンを強制して Windows の実装をコピーする方法はありますか? (たとえば、通常のマルチプロセッシング ライブラリの set_start_method または get_context?)
ありがとう。
python - クラス関数で python マルチプロセッシングを使用する場合の酸洗エラー
とにscheduler.py
基づく並列タスクランナーである3 つのスクリプトがあります。2 番目のスクリプトは、いくつかのクラスと関数を含むスクリプトであり、最後に、から並列化クラスを作成し、それを のクラスに渡し、全体を実行します。multiprocessing.Process
multiprocessing.Pipe
simulation.pyx
scheduler.py
scheduler.py
simulation.pyx
ターゲットの並列関数がすべての最上位にある場合は正常に動作しますが、クラス関数でsimulation.pyx
使用しようとするとすぐに酸洗エラーが発生します。scheduler.py
simulation.pyx
コードは数千行に及ぶため、概念的なコードのみを示します。
small_main_script.py
:
simulation.pyx
:
問題は、次のような役に立たないダミー関数を使用すると
最上位、つまりクラスの外側に配置すると、並列化は正常に機能しますが、クラス内に配置するとすぐにMain
酸洗エラーが発生します。クラスでも定義されている実際のターゲット関数を使用し、Main
それを最上位に移動したくない場合、同じエラーが発生します。sleep(self,job)
クラス内でダミー関数を使用すると、次のようになりますMain
。クラスの外にあるときは正常に動作します。
私はPython 2.7を使用しています
アップデート
問題をさらに切り分けることができました。サードパーティのパッケージpathos multiprocessing
を使用すると、クラス関数をピクルすることができます。問題は、クラス インスタンスである関数引数を使用するとエラーが発生することです。
python - pathos.multiprocessing を使用した AssertionError
私はpython 2.7を使用しています。これが私のコードの一部です:
ただし、これを実行すると、空白になりますAssertionError
:
このエラーは、この質問で説明されているエラーに似ているようですが、修正はより明白です。上記のコードを削除して実行しましpool.close()
たpool.join()
が、同じ結果が得られました。
考え?
python - ネストされたプールを使用して、pathos ですべての cpus を使用する方法
マルチプロセッシングのネストされたプールに関するこの質問に答える:
https://stackoverflow.com/a/40852258/6522112
私が提案したコードは、私が望んでいた方法で応答しませんでした。つまり、 と の場合ThreadingPool(8)
、ProcessingPool(3)
プロセスの数は 24 になると予想していましたが、3 つしか得られませんでした。そこで、デーモン フラグを False に設定することでネストされたプロセス プールを許可する、このhttps://stackoverflow.com/a/8963618/6522112の使用を続けました。これは完全に機能しますが:
- 24 ではなく 3 プロセスしか得られないのは正常でしたか?
- このハックで正しくやっていますか?
- 最終的な目的は、クラスター上の複数のノードを使用してこれを行うことです。これはそれを防ぎますか?
- 考慮すべきのタイプについてはよくわかりませんが、組み合わせ
map
だけが機能しているようです。imap
洞察はありますか?
pathos
単純なマルチプロセッシングの代わりに @MikeMcKernsを使用する変更されたコードを次に示します。
これを使用する場合は注意が必要です。内側のプールを終了する必要があります。そうしないと、ゾンビになってしまいます。