- 主题:请教个内存占用的问题
没用,引用的对象在gc前会被放到一个临时区里面,即使没有字面的变量绑定到他。
【 在 dgiij 的大作中提到: 】
: @functools.cache
: def a_long_time_calc(cis):
: ...
: ...................
--
FROM 221.224.37.*
谢谢诸位,问题解决了。
还是对原数据库的数据做了预处理,使用ZODB又另外实时建了一个临时数据库,把那个一堆的数据存成OOBTree而不是dict。
原理是, OOBTree的keys是可hash的,但每次取keys的地址不一样,所以弄了个带cache的实现,这个cache又可以存到数据库里。
内存降到之前1/3左右。代价就是速度慢了些,会写个比较大的临时文件出来。
【 在 pcal 的大作中提到: 】
: 我有段代码,逻辑总结起来比较简单:
: @functools.cache
: def a_long_time_calc(cis):
: ...................
--
FROM 221.224.37.*
你试试在循环外面抢先赋值一个cis = None
你在循环里面用一个外面没有定义,在循环里面定义的变量会每次循环都new一个,直到循环结束才会释放。
【 在 pcal 的大作中提到: 】
: 我有段代码,逻辑总结起来比较简单:
: @functools.cache
: def a_long_time_calc(cis):
: ...................
--
FROM 60.253.139.*
这个是正解。
functools.cache文档:
Returns the same as lru_cache(maxsize=None)
... never needs to evict old values ...
本来就不适合楼主这种场景使用的。
【 在 xuanqing 的大作中提到: 】
: 标 题: Re: 请教个内存占用的问题
: 发信站: 水木社区 (Mon Oct 13 17:43:44 2025), 转信
:
: 改用@functools.lru_cache试试
: 至少可以设一下maxsize
:
:
: 【 在 pcal 的大作中提到: 】
: : 我有段代码,逻辑总结起来比较简单:
: : @functools.cache
: : def a_long_time_calc(cis):
: : ...................
:
: --
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 123.123.203.*]
--
FROM 101.87.0.*