私は というパッケージの作者ですklepto
(そして の作者でもありますdill
)。
klepto
非常に単純な方法でオブジェクトを格納および取得するように構築されており、データベース、メモリ キャッシュ、およびディスク上のストレージへの単純な辞書インターフェイスを提供します。以下に、大きなオブジェクトを「ディレクトリ アーカイブ」に格納する方法を示します。これは、エントリごとに 1 つのファイルを持つファイル システム ディレクトリです。オブジェクトをシリアル化することを選択し (低速ですが、 を使用するdill
ため、ほとんどすべてのオブジェクトを格納できます)、キャッシュを選択します。メモリ キャッシュを使用すると、ディレクトリ アーカイブにすばやくアクセスできます。アーカイブ全体をメモリに保存する必要はありません。データベースやファイルとのやり取りは遅くなる可能性がありますが、メモリとのやり取りは高速です。また、アーカイブから好きなようにメモリ キャッシュを設定できます。
>>> import klepto
>>> d = klepto.archives.dir_archive('stuff', cached=True, serialized=True)
>>> d
dir_archive('stuff', {}, cached=True)
>>> import numpy
>>> # add three entries to the memory cache
>>> d['big1'] = numpy.arange(1000)
>>> d['big2'] = numpy.arange(1000)
>>> d['big3'] = numpy.arange(1000)
>>> # dump from memory cache to the on-disk archive
>>> d.dump()
>>> # clear the memory cache
>>> d.clear()
>>> d
dir_archive('stuff', {}, cached=True)
>>> # only load one entry to the cache from the archive
>>> d.load('big1')
>>> d['big1'][-3:]
array([997, 998, 999])
>>>
klepto
大量のストレージへの高速かつ柔軟なアクセスを提供します。アーカイブが並列アクセスを許可している場合 (たとえば、一部のデータベース)、結果を並列で読み取ることができます。また、異なる並列プロセスまたは異なるマシンで結果を共有することも簡単です。ここでは、同じディレクトリ アーカイブを指す 2 番目のアーカイブ インスタンスを作成します。2 つのオブジェクト間でキーを渡すのは簡単で、別のプロセスと同じように機能します。
>>> f = klepto.archives.dir_archive('stuff', cached=True, serialized=True)
>>> f
dir_archive('stuff', {}, cached=True)
>>> # add some small objects to the first cache
>>> d['small1'] = lambda x:x**2
>>> d['small2'] = (1,2,3)
>>> # dump the objects to the archive
>>> d.dump()
>>> # load one of the small objects to the second cache
>>> f.load('small2')
>>> f
dir_archive('stuff', {'small2': (1, 2, 3)}, cached=True)
また、さまざまなレベルのファイル圧縮から選択したり、ファイルをメモリ マップするかどうかを選択したりできます。ファイル バックエンドとデータベース バックエンドの両方に、さまざまなオプションがあります。ただし、インターフェイスは同じです。
ガベージ コレクションとディクショナリの一部の編集に関するその他の質問に関してはklepto
、メモリ キャッシュからのオブジェクトのロードと削除、ダンプ、ロード、およびアーカイブ バックエンドとの同期、または他の辞書メソッド。
ここでより長いチュートリアルを参照してください: https://github.com/mmckerns/tlkklp
klepto
ここにアクセスしてください: https://github.com/uqfoundation