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

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

python - 無料のワーカーが利用可能な場合にのみ未来を生成する方法

大きなファイルの行から抽出された情報を、サーバーで実行されているプロセスに送信しようとしています。

これを高速化するために、いくつかのスレッドを並行して実行したいと考えています。

私はこれを試したconcurrent.futuresのPython 2.7バックポートを使用して:

ただし、これには問題があります。すべての先物が即座に送信され、完全なファイルがメモリにロードされるため、マシンのメモリが不足するためです。

私の質問は、無料のワーカーが利用可能な場合にのみ新しい未来を提出する簡単な方法があるかどうかです.

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

python - concurrent.futures での例外の元の行番号の取得

concurrent.futures の使用例 (2.7 のバックポート):

出力:

文字列"...\_base.py", line 356, in __get_result"は、私が期待していたエンドポイントではありません。例外がスローされた実際の行を取得することは可能ですか? 何かのようなもの:

この場合、Python3 は正しい行番号を表示しているようです。なぜpython2.7にできないのですか? そして、回避策はありますか?

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

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
listOfParticlesThreadPoolExecutor

したがって、大きな問題 (ついに) :
プロセスとスレッドの両方を使用して以下を効果的に並列化できるように、コードをどのように構成すればよいでしょうか。

これは私が試してきたことですが、うまくいかないことがわかっているので、あえて実行しようとしません。

これを修正する方法、またはアプローチを改善する方法についての考えをいただければ幸いです

念のため、私は python3.3.2 を使用しています

0 投票する
4 に答える
71069 参照

python - ThreadPoolExecutor().map と ThreadPoolExecutor().submit の違いは?

私が書いたいくつかのコードに非常に混乱していました。私は次のことを発見して驚いた:

さまざまな結果を生み出します。最初のものは、f返される型のリストを生成し、2 番目のものは、返された値を取得するためにメソッドでconcurrent.futures.Future評価する必要があるオブジェクトのリストを生成します。result()f

私の主な懸念は、これは が をexecutor.map利用できないことを意味するということです。これconcurrent.futures.as_completedは、利用可能になったときに実行しているデータベースへの長時間の呼び出しの結果を評価する非常に便利な方法のように思えます。

オブジェクトがどのように機能するかについてはまったく明確ではありませんconcurrent.futures.ThreadPoolExecutor-単純に、(やや冗長)を好むでしょう:

executor.mapパフォーマンスが向上する可能性を利用するために、より簡潔にします。そうするのは間違っていますか?

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

python - Python、モジュール レベルの関数をクラス内から ThreadPoolExecutor に渡すことはできますか

私はPythonでマルチスレッドを実行しようとしていますが、まだ酸洗い可能性の要件と、コードのOOPをどれだけ維持できるかについて頭を悩ませています。

モジュール レベルで定義された関数を渡すクラス内から ThreadPoolExecutor を実行できますか? 私のセットアップは次のとおりです。

moduleA.py:

これを別のモジュールから呼び出せるようにしたい

moduleB.py

これは機能しますか?foo もインポートする必要がありますか?