Iにリストを持って、Lと大辞典、kはKの特定のキーであるKDキーを含むと読み取り専用辞書にアクセスします。 D [k]には、結果のリストを決定するために必要な情報が含まれています。今私はKの各値を調べています。私に値する情報があれば、kをLに追加します。これは反復的な方法で動作しますが、私はマルチスレッドでスピードアップできることを願っています。辞書の更新はありません。これを実装するための良い方法は何でしょうか?複数のスレッド
複数のスレッド
答えて
は、一般的な考え方は、MapReduceまたはProducer-Consumerパターンでありますキーの1/4と辞書への参照を取得します)。
Reduce/Consumer: プロセスがヒットしたことを検出すると、その値をスレッドセーフキューに送信します。
すべてのプロセスが正常に終了すると、キューに結果が保持されます。
ほぼ確実にあなたが見つける最も労働無料の方法は、マルチスレッドは、物事をスピードアップしませんmultiprocessing.Pool.map
機能(docs)
[MapReduceをPythonで実装する]素晴らしい記事(https://mikecvet.wordpress.com/2010/07/02/parallel-mapreduce-in-python/) –
あなたが使用しているPythonインタプリタと、辞書を検索する際に使用している方法によっては、マルチスレッド化はおそらく高速化しません。 cpythonのGlobal Interpreter Lock (GIL)は、指定された時間に1つのスレッドしかPythonコードを実行できないことを意味します。
Cで書かれたパフォーマンス用に最適化されたライブラリを使用している場合、数学的な重労働(NumPyはgood example)を実行している間にGILをリリースする可能性があります。同じことは、I/O上で待機しているスレッドにも当てはまります。それを超えると、スレッド化されたコンテキストの切り替えに伴うオーバーヘッドが発生するため、複数のスレッドで遅くなる可能性があります。
Pythonでは、通常、multi-processingを使用するとより良い結果が得られます。各プロセスには独自のGILがあり、コードは並列に実行できます。あなたの辞書は本当に読み込み専用であると仮定すると、生成された各プロセスに辞書のコピーを与えるのは簡単です。
マルチプロセッシングの欠点は、スレッド間の通信に伴うオーバーヘッドが増えることです。実行が分離されるほど、より良い結果が得られます。 Windowsには新しいプロセスが生成されるため、Windowsにはhigher cost associatedがある傾向にあることに注意してください。しかし、プロセスの数が非常に少ないため、CPUに制限された問題ではありません。
マップフェーズ/プロデューサー::。あなたが産卵したいプロセスの数(I、E、4つのプロセスについて、各プロセスによって探索空間を分割
- 1. 複数のスレッド
- 2. 複数のスレッド
- 3. 複数のスレッドへ
- 4. 複数のスレッド=複数のアプリケーションコンテキスト?
- 5. 複数のスレッドのクォーツオンクラウドサーバー
- 6. Arquillainの複数のスレッド
- 7. 複数のスレッドのpandasデータフレーム
- 8. configureと複数のスレッド
- 9. Java:複数のスレッド対ソケット
- 10. C#Mysqlと複数のスレッド?
- 11. Java Swingworkerと複数のスレッド
- 12. 複数のスレッドとメモリ
- 13. WPF BitmapFrameと複数のスレッド
- 14. 複数の無限スレッド
- 15. 複数スレッドのJmeterランダム変数
- 16. VS 7.1リリースコンパイルと複数スレッド
- 17. ISessionFactory.OpenSession()複数スレッドから
- 18. エンティティフレームワーク+複数スレッド+遅延ロード
- 19. Java - 非ブロッキングソケット用の複数スレッドの複数のセレクタ
- 20. 複数のオブジェクトにアクセスする複数のスレッド
- 21. 複数のスレッドが複数のパイプを必要とする
- 22. 複数のスレッドに複数のパラメータを渡す
- 23. シリアルポートを読むためのPython複数スレッド/複数のプロセス
- 24. 複数のスレッドを持つRubyのパフォーマンスと1つのスレッド
- 25. 複数のスレッド用の単一のHttpClientContext
- 26. 複数のサブクラスでのPythonのスレッド化
- 27. C++の複数のスレッドのtimer_create
- 28. HTTPのダウンロードと複数のスレッド
- 29. 複数のCPUとスレッドのシングルスレッドプロセス
- 30. 複数のスレッドのステップ実行
を使用することです。 –
@PeterWoodなぜですか? – ZWiki