Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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
Python 如何使用ZODB进行适当的内存管理?_Python_Memory Management_Zodb - Fatal编程技术网

Python 如何使用ZODB进行适当的内存管理?

Python 如何使用ZODB进行适当的内存管理?,python,memory-management,zodb,Python,Memory Management,Zodb,我读了好几篇ZODB教程,但有一件事我仍然不明白:如何释放已经序列化并提交到say FileStorage的内存 更具体地说,我希望以下代码停止占用我所有的内存: for i in xrange(bignumber): iobtree[i]=Bigobject() # Bigobject is about 1Mb if(i%10==0): transaction.commit() # or savepoint(True) transaction.commit()

我读了好几篇ZODB教程,但有一件事我仍然不明白:如何释放已经序列化并提交到say FileStorage的内存

更具体地说,我希望以下代码停止占用我所有的内存:

for i in xrange(bignumber):
    iobtree[i]=Bigobject() # Bigobject is about 1Mb
    if(i%10==0): 
        transaction.commit() # or savepoint(True)
transaction.commit()

如何做到这一点?是否可以释放iobtree存储的引用,并将其替换为可按需访问的“弱引用”?

创建保存点并提交事务已经清除了大量内存

您需要检查您的ZODB缓存参数设置为什么,并根据需要调整这些参数。cache size参数表示缓存的对象数,而不是字节数,因此您必须根据对象的大小进行调整

您可以尝试在ZODB连接对象上调用.cacheMinimize,这会显式停用缓存中任何未修改或已提交的对象


除此之外,请注意,即使Python从内存中释放对象,操作系统也不会总是回收释放的内存,直到其他东西需要它。OS报告的内存使用情况不一定反映Python进程的实际内存需求。

谢谢,这真的很有帮助。