重い辞書をデータ (約 250M データ) として使用する CPU 集中型のコードがあります。マルチコア プロセッサを使用していて、一度に複数のタスクを実行できるように利用したいと考えています。ディクショナリはほとんどが読み取り専用で、1 日に 1 回更新される場合があります。
辞書を複製せずにPythonでこれを書くにはどうすればよいですか?
Python スレッドはネイティブ スレッドを使用せず、真の同時実行性を提供しないことを理解しています。プロセス間でデータをシリアル化せずにマルチプロセッシング モジュールを使用できますか?
私はJavaの世界から来ました。私の要件は、データを共有し、複数のプロセッサで実行し、同期プリミティブを提供できるJavaスレッドのようなものです。
3 に答える
1
プロセス間で読み取り専用データを単純に共有できますfork
(Unix では、Windows では簡単な方法ではありません)。独自のコピーを更新するプロセス)。のようなネイティブの Python 構造dict
は、共有メモリ内の任意のアドレスに存在するように設計されていないため ( dict
C でそれをサポートするバリアントをコーディングする必要があります)、慰めにはなりません。
Jython (または IronPython) を使用して、複数の同時スレッドによるマルチプロセッサの使用を含め、Java (またはそれぞれ C#) とまったく同じマルチスレッド機能を備えた Python 実装を取得できます。
于 2010-01-26T01:11:07.530 に答える
1
shelve
辞書に使用します。書き込みは頻繁に行われないため、共有しても問題はありません。
于 2010-01-26T00:54:57.273 に答える
0
stdlib でこれを見てみましょう: http://docs.python.org/library/multiprocessing.html プロセス間でデータ構造を非常に簡単に共有できる素晴らしい機能がたくさんあります。
于 2010-01-26T02:21:53.180 に答える