問題タブ [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 - それは私だけですか、それともWindowsの新しいPython先物モジュールに深刻な問題がありますか
私はWindowsXPを使用していますが、新しいPython3.2futuresモジュールに問題があります。仕事ができないようですProcessPoolExecutor
。セッションの例:
ここで何かがおかしいようです。
python - Python 3のconcurrent.futuresソケットサーバーはThreadPoolExecutorで動作しますが、ProcessPoolExecutorでは動作しません
新しいconcurrent.futuresクラスを使用して単純なソケットサーバーを作成しようとしています。ThreadPoolExecutorを使用して正常に動作させることはできますが、ProcessPoolExecutorを使用するとハングし、理由がわかりません。状況を考えると、ピクルスにできないものを子プロセスに渡そうとすることと関係があるのではないかと思いましたが、そうではありません。私のコードの簡略版を以下に示します。アドバイスをいただければ幸いです。
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_ids
はoptions.verbose
可変であるため、固定として指定することはできませんヘルプ関数の値。
何をすべきかアイデアはありますか?
python - concurrent.futures コードのデッドロック
を使用していくつかのコードを並列化しようとしましたがconcurrent.futures.ProcessPoolExecutor
、 では発生しない奇妙なデッドロックが発生し続けていますThreadPoolExecutor
。最小限の例:
Python 3.2.2 (64 ビット Ubuntu 上) では、これはすべてのジョブを送信した後に一貫してハングしているように見えます。これは、送信されたジョブの数がワーカーの数よりも多い場合に発生するようです。私が交換ProcessPoolExecutor
した場合、ThreadPoolExecutor
それは問題なく動作します。
調査の試みとして、各 Future にi
次の値を出力するためのコールバックを指定しました。
これは私をさらに混乱させました-i
出力された bycallback
の値は、定義されたときではなく、呼び出されたときの値です(したがって、表示されませんcallback 0
が、多くのcallback 99
s が得られます)。繰り返しThreadPoolExecutor
ますが、期待値を出力します。
これはバグではないかと思い、最近開発された Python のバージョンを試してみました。これで、コードは少なくとも終了したように見えますが、それでも間違った値がi
出力されます。
誰でも説明できます:
ProcessPoolExecutor
Python 3.2 と、このデッドロックを明らかに修正した現在の開発バージョンの間で何が起こったのかの「間違った」値
i
が表示される理由
編集: jukiewicz が以下で指摘したように、もちろん、印刷i
するとコールバックが呼び出されたときに値が印刷されます。何を考えていたのかわかりません...i
属性の 1 つとして値を持つ呼び出し可能なオブジェクトを渡す場合、期待どおりに動作します。
EDIT:もう少し情報:すべてのコールバックが実行されるため、プロセスが完了したことを伝えることができないexecutor.shutdown
(によって呼び出される)ようです。これは現在の python 3.3 で完全に修正されたようですが、とexecutor.__exit__
に多くの変更があったようです。そのため、何が修正されたのかわかりません。私は 3.3 を使用できないので (numpy のリリース バージョンまたは開発バージョンと互換性がないようです)、そのマルチプロセッシング パッケージとコンカレント パッケージを 3.2 インストールに単純にコピーしてみましたが、問題なく動作しているようです。それでも、私が見る限り、最新のリリース バージョンでは完全に壊れているのに、他の誰も影響を受けていないというのは少し奇妙に思えます。multiprocessing
concurrent.futures
ProcessPoolExecutor
python - ThreadPoolExecutor内部
concurrent.futures
'クラスを使用ThreadPoolExecutor
して、Webサービスでストレステストを実行しています。
私が理解できる限り、max_workers
コンストラクターパラメーターは、プールに含まれるスレッドの最大数をエグゼキューターに通知します。とにかく、それが効果的に使用される数であるという保証はありますか、またはそれよりも少ない可能性がありますか(たとえば、ハードウェアの制限のため)?
もしそうなら、いくつのワーカースレッドが効果的にインスタンス化されるかを知る方法はありますか?
python - Pythonの`futures`の`DummyExecutor`
Pythonのfutures
パッケージを使用すると、タスクを並行して楽しむことができThreadPoolExecutor
ますProcessPoolExecutor
。
ただし、デバッグの場合、スレッドやプロセスを生成せずに、メインスレッドでタスクをシリアルに実行するダミーの並列処理に一時的に置き換えると便利な場合があります。
どこかに実装はありDummyExecutor
ますか?
python - concurrent.futures ThreadPoolExecutor は待機に失敗しますか?
私は、concurrent.futures の ThreadPoolExecutor を使用して、スクリプトのパフォーマンスを改善しようとしています。Popen を介していくつかの外部 python スクリプトを起動し、それらを将来のオブジェクトとしてカプセル化していますが、これらのオブジェクトは完了としてコールバック関数に入りますが、マシンで実行されているのを見ることができます (かなりの時間実行されます)。コードは次のようになります。
また、running() および wait() の将来の関数を使用してさまざまなアプローチを試みましたが、結果は同じでした。将来のオブジェクトは既に完了しているとマークされていますが、実際にはまだ実行中です。何か不足していますか?
ありがとう、
python - Pythonでのマルチプロセッシングに対するconcurrent.futuresの利点は何ですか?
Pythonでアプリを作成していますが、いくつかのタスクを同時に実行する必要があります。モジュールマルチプロセッシングはクラスProcessを提供し、concurrent.futuresモジュールはクラスProcessPoolExecutorを持っています。どちらもタスクを実行するために複数のプロセスを使用しているようですが、APIは異なります。なぜ一方を他方の上に使用する必要があるのですか?
私はconcurrent.futuresがPython3で追加されたことを知っているので、それがより良いと思いますか?
python - コンカレント.futuresはGILの薬ですか?
私はこの新しい実装について検索していましたが、Python 2.7を使用しています。これをインストールする必要があるため、これを使用すると、CPythonのGILという単語を忘れてしまいますか?
python - 結果のないタスクに Python フューチャを使用することは良い考えですか?
concurrent.futures
次のようなモジュールを使用して、オブジェクトに非同期の set および get 操作を実装し始めたときに、問題が発生しました。
しかし今、値を設定してそれを待つことは、使用するのが少し厄介になり、意味的に「正しくない」
Foo
オブジェクトは最下位レベルにあり、未来の上にさらに抽象化を構築できるため、まだ有効だと思います。
だから、私の問題を要約するには:
- 先物は、オブジェクトから非同期に値を取得/設定するための正しい種類の抽象化ですか? 特に値を返さないセッターの場合は?
- 呼び出しを取り除くために
blocking
パラメータを追加する必要がありますか? このアプローチには疑問があります。なぜなら、先物をまったく使用しないことをお勧めします。set_something
result()
- どのようにしますか?