1

基本上,我想要在我正在编写的 python 程序中使用无限大小(更准确地说,是硬盘驱动器而不是内存限制)字典。似乎 tempfile 和 shelve 模块自然适合这个,但是,我看不出如何以安全的方式一起使用它们。我希望在搁置被 GC 时删除临时文件(或者保证在搁置停止使用后删除,无论何时),但我能想到的唯一解决方案是使用 tempfile.TemporaryFile() 打开一个文件句柄,从句柄中获取文件名,使用这个文件名打开一个搁置,保持对文件句柄的引用以防止它被 GCed(和文件删除),然后在搁置上放置一个包装器来存储这个参考。任何人都有比这个令人费解的混乱更好的解决方案吗?

限制:只能使用标准python库,必须完全跨平台。

4

1 回答 1

1

我宁愿从 shelve.Shelf 继承,并重写 close 方法 (*) 以取消链接文件。请注意,根据所使用的特定 dbm 模块,您可能有多个文件包含书架。一种解决方案可能是创建一个临时目录,而不是一个临时文件,并在完成后删除目录中的任何内容。另一种解决方案是绑定到特定的 dbm 模块(例如,bsddb 或dumbdbm),并专门删除这些库创建的那些文件。

(*) 请注意,当架子被垃圾收集时,也会调用架子的关闭方法。最终得到垃圾文件的唯一情况是解释器崩溃或被杀死。

于 2009-08-19T06:46:26.797 回答