問題タブ [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 に答える
1312 参照

python - それは私だけですか、それともWindowsの新しいPython先物モジュールに深刻な問題がありますか

私はWindowsXPを使用していますが、新しいPython3.2futuresモジュールに問題があります。仕事ができないようですProcessPoolExecutor。セッションの例:

ここで何かがおかしいようです。

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

python - Python 3のconcurrent.futuresソケットサーバーはThreadPoolExecutorで動作しますが、ProcessPoolExecutorでは動作しません

新しいconcurrent.futuresクラスを使用して単純なソケットサーバーを作成しようとしています。ThreadPoolExecutorを使用して正常に動作させることはできますが、ProcessPoolExecutorを使用するとハングし、理由がわかりません。状況を考えると、ピクルスにできないものを子プロセスに渡そうとすることと関係があるのではないかと思いましたが、そうではありません。私のコードの簡略版を以下に示します。アドバイスをいただければ幸いです。

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

python - executor.mapおよび非teratingパラメーター

スクリプトをスレッドの使用からはるかにクールなマルチプロセッシングに変換しようとしています(Python 3.2以降を使用していますconcurrent.futuresが、このコードはクラッシュします

エラーが発生します_pickle.PicklingError: Can't pickle <class 'function'>: attribute lookup builtins.function failedこの回答を読んだとき、問題はラムダ関数をパラメーターとして持つことができないことでexecutor.map()あり、そのためにexecutor.map()は1パラメーター関数を開発する必要がありますが、それらpci_idsoptions.verbose可変であるため、固定として指定することはできませんヘルプ関数の値。

何をすべきかアイデアはありますか?

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

python - concurrent.futures コードのデッドロック

を使用していくつかのコードを並列化しようとしましたがconcurrent.futures.ProcessPoolExecutor、 では発生しない奇妙なデッドロックが発生し続けていますThreadPoolExecutor。最小限の例:

Python 3.2.2 (64 ビット Ubuntu 上) では、これはすべてのジョブを送信した後に一貫してハングしているように見えます。これは、送信されたジョブの数がワーカーの数よりも多い場合に発生するようです。私が交換ProcessPoolExecutorした場合、ThreadPoolExecutorそれは問題なく動作します。

調査の試みとして、各 Future にi次の値を出力するためのコールバックを指定しました。

これは私をさらに混乱させました-i出力された bycallbackの値は、定義されたときではなく、呼び出されたときの値です(したがって、表示されませんcallback 0が、多くのcallback 99s が得られます)。繰り返しThreadPoolExecutorますが、期待値を出力します。

これはバグではないかと思い、最近開発された Python のバージョンを試してみました。これで、コードは少なくとも終了したように見えますが、それでも間違った値がi出力されます。

誰でも説明できます:

  • ProcessPoolExecutorPython 3.2 と、このデッドロックを明らかに修正した現在の開発バージョンの間で何が起こったのか

  • の「間違った」値iが表示される理由

編集: jukiewicz が以下で指摘したように、もちろん、印刷iするとコールバックが呼び出されたときに値が印刷されます。何を考えていたのかわかりません...i属性の 1 つとして値を持つ呼び出し可能なオブジェクトを渡す場合、期待どおりに動作します。

EDIT:もう少し情報:すべてのコールバックが実行されるため、プロセスが完了したことを伝えることができないexecutor.shutdown(によって呼び出される)ようです。これは現在の python 3.3 で完全に修正されたようですが、とexecutor.__exit__に多くの変更があったようです。そのため、何が修正されたのかわかりません。私は 3.3 を使用できないので (numpy のリリース バージョンまたは開発バージョンと互換性がないようです)、そのマルチプロセッシング パッケージとコンカレント パッケージを 3.2 インストールに単純にコピーしてみましたが、問題なく動作しているようです。それでも、私が見る限り、最新のリリース バージョンでは完全に壊れているのに、他の誰も影響を受けていないというのは少し奇妙に思えます。multiprocessingconcurrent.futuresProcessPoolExecutor

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

python - ThreadPoolExecutor内部

concurrent.futures'クラスを使用ThreadPoolExecutorして、Webサービスでストレステストを実行しています。

私が理解できる限り、max_workersコンストラクターパラメーターは、プールに含まれるスレッドの最大数をエグゼキューターに通知します。とにかく、それが効果的に使用される数であるという保証はありますか、またはそれよりも少ない可能性がありますか(たとえば、ハードウェアの制限のため)?

もしそうなら、いくつのワーカースレッドが効果的にインスタンス化されるかを知る方法はありますか?

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

python - Pythonの`futures`の`DummyExecutor`

Pythonのfuturesパッケージを使用すると、タスクを並行して楽しむことができThreadPoolExecutorますProcessPoolExecutor

ただし、デバッグの場合、スレッドやプロセスを生成せずに、メインスレッドでタスクをシリアルに実行するダミーの並列処理に一時的に置き換えると便利な場合があります。

どこかに実装はありDummyExecutorますか?

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

python - concurrent.futures ThreadPoolExecutor は待機に失敗しますか?

私は、concurrent.futures の ThreadPoolExecutor を使用して、スクリプトのパフォーマンスを改善しようとしています。Popen を介していくつかの外部 python スクリプトを起動し、それらを将来のオブジェクトとしてカプセル化していますが、これらのオブジェクトは完了としてコールバック関数に入りますが、マシンで実行されているのを見ることができます (かなりの時間実行されます)。コードは次のようになります。

また、running() および wait() の将来の関数を使用してさまざまなアプローチを試みましたが、結果は同じでした。将来のオブジェクトは既に完了しているとマークされていますが、実際にはまだ実行中です。何か不足していますか?

ありがとう、

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

python - Pythonでのマルチプロセッシングに対するconcurrent.futuresの利点は何ですか?

Pythonでアプリを作成していますが、いくつかのタスクを同時に実行する必要があります。モジュールマルチプロセッシングはクラスProcessを提供し、concurrent.futuresモジュールはクラスProcessPoolExecutorを持っています。どちらもタスクを実行するために複数のプロセスを使用しているようですが、APIは異なります。なぜ一方を他方の上に使用する必要があるのですか?

私はconcurrent.futuresがPython3で追加されたことを知っているので、それがより良いと思いますか?

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

python - コンカレント.futuresはGILの薬ですか?

私はこの新しい実装について検索していましたが、Python 2.7を使用しています。これをインストールする必要があるため、これを使用すると、CPythonのGILという単語を忘れてしまいますか?

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

python - 結果のないタスクに Python フューチャを使用することは良い考えですか?

concurrent.futures次のようなモジュールを使用して、オブジェクトに非同期の set および get 操作を実装し始めたときに、問題が発生しました。

しかし今、値を設定してそれを待つことは、使用するのが少し厄介になり、意味的に「正しくない」

Fooオブジェクトは最下位レベルにあり、未来の上にさらに抽象化を構築できるため、まだ有効だと思います。

だから、私の問題を要約するには:

  • 先物は、オブジェクトから非同期に値を取得/設定するための正しい種類の抽象化ですか? 特に値を返さないセッターの場合は?
  • 呼び出しを取り除くためにblockingパラメータを追加する必要がありますか? このアプローチには疑問があります。なぜなら、先物をまったく使用しないことをお勧めします。set_somethingresult()
  • どのようにしますか?