python字典占内存_python – 加载导致内存峰值的字典对象

..如何使用一些适当的缓存服务,如redis或memcached,而不是加载内存python端的巨大对象?这样,如果字典增长更多,你甚至可以扩展额外的机器.

无论如何,100MB内存包含所有数据哈希索引misc.高架;前几天我注意到很多次内存都没有被释放,直到你退出Python进程(我从Python解释器填充了几个内存,加载了一个巨大的json对象.. :));如果有人有解决方案,这将是有趣的..

更新:内存很少的缓存

您只有512MB RAM的选项是:

>使用redis,看看这里http://redis.io/topics/memory-optimization(但我怀疑512MB还不够,甚至优化)

>使用单独的机器(或者由于memcached和redis都支持分片的集群)以更多的ram来保持缓存

>使用database cache backend,速度要慢得多,但内存消耗更少,因为它可以节省磁盘上的所有内容

>使用filesystem cache(虽然我没有看到更喜欢这个优于数据库缓存)

并且,在后两种情况下,尝试拆分对象,这样就不会一次从缓存中检索兆字节的对象.

更新:跨越多个缓存键的懒惰字典

你可以用这样的东西替换你的缓存的dict;这样,您可以像使用普通字典一样继续处理它,但只有在您确实需要时才会从缓存加载数据.

from django.core.cache import cache

from UserDict import DictMixin

class LazyCachedDict(DictMixin):

def __init__(self,key_prefix):

self.key_prefix = key_prefix

def __getitem__(self,name):

return cache.get('%s:%s' % (self.key_prefix,name))

def __setitem__(self,name,value):

return cache.set('%s:%s' % (self.key_prefix,name),value)

def __delitem__(self,name):

return cache.delete('%s:%s' % (self.key_prefix,name))

def has_key(self,name):

return cache.has_key(name)

def keys():

## Just fill the gap,as the cache object doesn't provide

## a method to list cache keys..

return []

然后替换这个:

projects_map = cache.get('projects_map')

projects_map.get('search term')

有:

projects_map = LazyCachedDict('projects_map')

projects_map.get('search term')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值