私はプロセスとconcurrent.futures
を使っていくつかのPythonコードを並列化しようとしています。先ほどsubmittingで呼び出され、Future.result()
を呼び出すか、Executor.map()
を使って関数を複数回parrallelで実行できるようです。
私は後者が前者の単なる構文上の砂糖であるのか、パフォーマンス面での違いがあるのか疑問に思います。ドキュメントからはすぐには分かりません。concurrent.futures.Executor.map()の理解
答えて
これにより、真の並列実行ではなく、複数回の同時実行が可能になります。
パフォーマンスは賢明ですが、私は最近、ProcessPoolExecutor.submit()
とProcessPoolExecutor.map()
が同じタスクを完了するために同じ量の計算時間を消費していることを発見しました。注:.submit()
は将来のオブジェクトを返します(fと呼ぶ)、その結果を見るにはf.result
オプションを使用する必要があります。一方、.map()
はイテレータを直接返します。
並べ替えられたメソッドを使用して結果を順序付きリストに変換すると、特定のシナリオで.map()
コード全体の計算時間が.submit()
コード全体よりも速くなることがわかりました。
リストメソッドを使用してその結果を順序付けられていないリストに変換する場合、.submit()
と.map()
コードの計算時間は同じです。また、これらのコードは、ソートされたメソッドを使用するコードよりも高速に実行されました。
私のanswerで詳細を読むことができます。そこでは、自分のコードを共有して、どのように動作するかを確認できます。彼らがあなたに役立つことを願っています。
私はThreadPoolExecutor
を使用していませんので、詳しくはコメントできません。しかし、私はProcessPoolExecutor
と同じ方法で実装されており、CPUバインドされたタスクの代わりにI/Oバインドされたタスクに使用する方が適していると読んでいます。あなたはProcessPoolExecutor
max_workers
にどのos.cpu_count()
によって返されたCPUの数にデフォルトオプションの引数であるのに対し、max_workers
引数、スレッドのすなわち最大数を指定する必要があります。
- 1. の理解のために、理解
- 2. ノード/モンゴでの理解の理解
- 3. バックボーンとマリオネットの理解ライフサイクルの理解
- 4. C#の解析の理解
- 5. pandas.read_csv()float解析の理解
- 6. アセンブリコードの解読と理解
- 7. SFINAEの理解
- 8. インターフェイスの理解
- 9. バターワースフィルタの理解
- 10. TimeUnitの理解
- 11. ConfigureAwaitの理解
- 12. ハイブクエリプランの理解
- 13. __getitem__メソッドの理解
- 14. WebRequestの理解
- 15. MsgWaitForMultipleObjectsの理解
- 16. バインドイベントの理解
- 17. インプレースマージソートの理解
- 18. コントロールフローの理解
- 19. WeakReferenceの理解
- 20. プリプロセッサディレクティブの理解
- 21. メモリモデルの理解
- 22. gcrootの理解
- 23. ヘルプエラーレポートの理解
- 24. ダブルバッファの理解
- 25. クリップパスの理解
- 26. ページディレクトリの理解
- 27. fetch_assoc()の理解
- 28. スパークシャッフルスピルの理解
- 29. 理解のpthread
- 30. Silverlightの理解