Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取大量文件或lmdb时禁用python文件缓存_Python_Caching_Large Files - Fatal编程技术网

读取大量文件或lmdb时禁用python文件缓存

读取大量文件或lmdb时禁用python文件缓存,python,caching,large-files,Python,Caching,Large Files,我的代码在CentOS 6.6上的群集节点上运行,内存为100GB。然而,这似乎还不够大,因为我的代码需要读取1000多个hickle文件(每个200MB)。这总共是240GB。当代码运行时,系统内存缓存会不断增加,直到满,并且在分配新对象和执行numpy数组计算时,代码性能会变得非常慢 我试图执行gc.collect和del以防止内存泄漏,但内存仍在增加。我怀疑这是由于文件缓存。因此,我想知道pythonsys或os-lib中是否有一个函数可以在读取大量(1000)大型hickle文件(每个2

我的代码在CentOS 6.6上的群集节点上运行,内存为100GB。然而,这似乎还不够大,因为我的代码需要读取1000多个hickle文件(每个200MB)。这总共是240GB。当代码运行时,系统内存缓存会不断增加,直到满,并且在分配新对象和执行numpy数组计算时,代码性能会变得非常慢


我试图执行gc.collect和del以防止内存泄漏,但内存仍在增加。我怀疑这是由于文件缓存。因此,我想知道pythonsys或os-lib中是否有一个函数可以在读取大量(1000)大型hickle文件(每个200MB)或单个lmdb文件(240GB)时禁用python文件系统缓存。实际上,一旦读取这些文件,我就不需要缓存它们。

因为Python使用引用计数,大多数对象在删除时都会被释放

自动垃圾收集器为您做的唯一一件好事是收集并释放具有循环引用的已删除对象-- 例如,如果您有引用自身或相互引用的对象:

>>> class Foo(object): pass
... 
>>> x, y = Foo(), Foo()
>>> x.y = y
>>> y.x = x
如果您从未编写过创建此类引用的代码,或者您创建了这些引用,但随后手动破坏它们,那么垃圾收集器所做的一切就是浪费您的CPU时间,试图找到不存在的要收集的东西。如果你有很多小对象,这会让你的系统慢下来


我不知道你的hickle文件——有时在读写这些东西时需要创建循环引用,但是对于很多代码来说,使用垃圾收集器最好的方法是使用
gc.disable()

完全关闭它。你解决过这个问题吗?我对这个话题很感兴趣。在我的例子中,我并行加载
.json
文件
gc.collect()
似乎显示了改进,但在这个阶段,我不能完全确定这一点。我只是想知道,如果加载的文件超出范围,为什么内存不能被释放。这可能会有帮助: