系统相关
首页 > 系统相关> > 如何使用ZODB进行适当的内存管理?

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

作者:互联网

我阅读了几个ZODB教程,但这里有一件事我还是没有得到:你如何释放已经序列化(并提交)到(比如)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从内存中释放对象,操作系统也不会总是回收释放的内存,直到需要其他内容为止.操作系统报告的内存使用量不一定反映Python进程的实际内存要求.

标签:python,memory-management,zodb
来源: https://codeday.me/bug/20190620/1246840.html