在我的部署环境中,我试图使用类似于下面的循环运行一个脚本。但是,脚本会因为占用太多内存而被删除。当我检查循环的内存消耗时,我注意到在循环的每一次迭代中,消耗增加了1-2MB。
有人能告诉我消费增长的原因是什么吗?我怎样才能阻止消费增长?
import tracemalloc
from mongoengine_models import SomeModel
tracemalloc.start()
for count, rel in enumerate(SomeModel.objects.filter(some_attr="some_value")):
current, peak = tracemalloc.get_traced_memory()
current_mb = current / 10**6
peak_mb = peak / 10**6
print(f"Current memory usage is {current_mb}MB; Peak was {peak_mb}MB")
print(count, rel.some_other_attr_1, rel.some_other_attr_2)
tracemalloc.stop()更新:我发现我可以通过在每次迭代结束时执行del rel、del some_other_attr_1、del some_other_attr_2来防止消费的增长,因为这感觉就像一个讨厌的解决方案。
发布于 2022-09-21 08:27:01
查询集的结果被缓存。您可以通过使用no_cache()来避免这种情况。
SomeModel.objects.no_cache().filter(some_attr="some_value")有一篇关于no_cache here的帖子。
https://stackoverflow.com/questions/72546644
复制相似问题