問題タブ [concurrent.futures]
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 - 無料のワーカーが利用可能な場合にのみ未来を生成する方法
大きなファイルの行から抽出された情報を、サーバーで実行されているプロセスに送信しようとしています。
これを高速化するために、いくつかのスレッドを並行して実行したいと考えています。
私はこれを試したconcurrent.futuresのPython 2.7バックポートを使用して:
ただし、これには問題があります。すべての先物が即座に送信され、完全なファイルがメモリにロードされるため、マシンのメモリが不足するためです。
私の質問は、無料のワーカーが利用可能な場合にのみ新しい未来を提出する簡単な方法があるかどうかです.
python - concurrent.futures での例外の元の行番号の取得
concurrent.futures の使用例 (2.7 のバックポート):
出力:
文字列"...\_base.py", line 356, in __get_result"
は、私が期待していたエンドポイントではありません。例外がスローされた実際の行を取得することは可能ですか? 何かのようなもの:
この場合、Python3 は正しい行番号を表示しているようです。なぜpython2.7にできないのですか? そして、回避策はありますか?
python - ProcessPoolExecutor 内の ThreadPoolExecutor
私は先物モジュールを初めて使用し、並列化の恩恵を受ける可能性のあるタスクを持っています。しかし、スレッドの関数とプロセスの関数をセットアップする方法を正確に理解できないようです。誰でもこの問題について何か助けていただければ幸いです。
粒子群最適化 (PSO)を実行しています。PSO 自体について詳しくは説明しませんが、コードの基本的なレイアウトは次のとおりです。
Particle
メソッドを備えたクラスがありますgetFitness(self)
(これは、いくつかのメトリックを計算し、それを に保存しますself.fitness
)。PSO シミュレーションには、複数の粒子インスタンスがあります (10 を簡単に超えます。一部のシミュレーションでは 100 または 1000 ですらあります)。
ときどき、粒子の適合度を計算する必要があります。現在、私は for ループでこれを行います:
ただし、各粒子の適合度は互いに独立して計算できることに気付きました。これにより、このフィットネス計算は並列化の最有力候補になります。確かに、私はすることができmap(lambda p: p.getFitness(args), listOfParticles)
ました。
今、私はこれを簡単に行うことができますfutures.ProcessPoolExecutor
:
呼び出しの副作用はp.getFitness
各パーティクル自体に格納されているため、 から返されることを心配する必要はありませんfutures.ProcessPoolExecutor()
。
ここまでは順調ですね。しかし今、私はそれが新しいプロセスを作成することに気付きましたProcessPoolExecutor
。つまり、メモリをコピーするため、速度が低下します。メモリを共有できるようにしたいので、スレッドを使用する必要があります。それは良いことですが、各プロセス内で複数のスレッドを使用して複数のプロセスを実行する方が高速になる可能性が高いことに気付くまでは.
ここで問題が発生します。
これまでに見た例に基づいて、 は でThreadPoolExecutor
動作しlist
ます。そうProcessPoolExecutor
です。そのため、単一のオブジェクトを処理する必要があるため、反復的にProcessPoolExecutor
ファームアウトするThreadPoolExecutor
ことはできません(以下に投稿された私の試みを参照してください)。
一方で、必要なスレッドの数を把握するために独自の魔法を実行したいので、自分自身をスライスすることはできません。ThreadPoolExecutor
listOfParticles
ThreadPoolExecutor
したがって、大きな問題 (ついに) :
プロセスとスレッドの両方を使用して以下を効果的に並列化できるように、コードをどのように構成すればよいでしょうか。
これは私が試してきたことですが、うまくいかないことがわかっているので、あえて実行しようとしません。
これを修正する方法、またはアプローチを改善する方法についての考えをいただければ幸いです
念のため、私は python3.3.2 を使用しています
python - ThreadPoolExecutor().map と ThreadPoolExecutor().submit の違いは?
私が書いたいくつかのコードに非常に混乱していました。私は次のことを発見して驚いた:
と
さまざまな結果を生み出します。最初のものは、f
返される型のリストを生成し、2 番目のものは、返された値を取得するためにメソッドでconcurrent.futures.Future
評価する必要があるオブジェクトのリストを生成します。result()
f
私の主な懸念は、これは が をexecutor.map
利用できないことを意味するということです。これconcurrent.futures.as_completed
は、利用可能になったときに実行しているデータベースへの長時間の呼び出しの結果を評価する非常に便利な方法のように思えます。
オブジェクトがどのように機能するかについてはまったく明確ではありませんconcurrent.futures.ThreadPoolExecutor
-単純に、(やや冗長)を好むでしょう:
executor.map
パフォーマンスが向上する可能性を利用するために、より簡潔にします。そうするのは間違っていますか?
python - Python、モジュール レベルの関数をクラス内から ThreadPoolExecutor に渡すことはできますか
私はPythonでマルチスレッドを実行しようとしていますが、まだ酸洗い可能性の要件と、コードのOOPをどれだけ維持できるかについて頭を悩ませています。
モジュール レベルで定義された関数を渡すクラス内から ThreadPoolExecutor を実行できますか? 私のセットアップは次のとおりです。
moduleA.py:
これを別のモジュールから呼び出せるようにしたい
moduleB.py
これは機能しますか?foo もインポートする必要がありますか?