1

基本的に、私が書いているPythonプログラムでは、無限のサイズ(より正確には、メモリバウンドではなくハードドライブ)のdictが必要です。tempfileモジュールとshelveモジュールは当然これに適しているようですが、安全に一緒に使用する方法がわかりません。シェルフがGCされたときに一時ファイルを削除したいのですが(または、いつかに関わらず、シェルフが使用されなくなった後の削除が保証されます)、これを実現する唯一の解決策は、tempfile.TemporaryFile()を使用して開くことです。ファイルハンドル、ハンドルからファイル名を取得し、このファイル名を使用してシェルフを開き、ファイルハンドルへの参照を保持して、GCされないように(およびファイルが削除されないように)、これを格納するシェルフにラッパーを配置します参照。誰もがこの複雑な混乱よりも優れた解決策を持っていますか?

制限事項:標準のPythonライブラリのみを使用でき、完全にクロスプラットフォームである必要があります。

4

1 に答える 1

1

むしろshelve.Shelfから継承し、closeメソッド(*)をオーバーライドしてファイルのリンクを解除したいと思います。使用されている特定のdbmモジュールによっては、シェルフを含むファイルが複数ある場合があることに注意してください。1つの解決策は、一時ファイルではなく一時ディレクトリを作成し、完了したらディレクトリ内のすべてのものを削除することです。もう1つの解決策は、特定のdbmモジュール(たとえば、bsddb、またはdumbdbm)にバインドし、これらのライブラリが作成するファイルを具体的に削除することです。

(*)シェルフがガベージコレクションされるときに、シェルフのクローズメソッドも呼び出されることに注意してください。ガベージファイルが発生する可能性がある唯一のケースは、インタプリタがクラッシュまたは強制終了された場合です。

于 2009-08-19T06:46:26.797 に答える