2 回答
TA贡献1853条经验 获得超6个赞
现在,如果我消除“for”循环,只保留查询,问题就会消失,内存使用量保持在 190 Mb 不变,即使在 100 多个请求之后也不会增加。
query.fetch()
返回一个迭代器,而不是结果的实际数组
查看源代码,看起来这个迭代器具有用于获取查询的下一页的代码。所以你的 for 循环强制它获取结果的所有页面。事实上,在您开始迭代之前,我认为它实际上不会获取任何内容。这就是为什么删除 for 循环会产生影响
不幸的是,除此之外我不确定,因为当您深入研究源代码时,您很快就会遇到 GRPC 存根,并且不清楚问题是否在那里。
TA贡献1799条经验 获得超9个赞
尝试使用NDB Library。对该库的所有调用都必须包装到上下文管理器中,这应该保证关闭后的清理工作。这可以帮助解决您的问题:
ndb_client = ndb.Client(**init_client)
with ndb_client.context():
query = MyModel.query().order(MyModel.my_column)
sources = query.fetch()
for source in sources:
pass
# if you try to query DataStore outside the context manager, it will raise an error
query = MyModel.query().order(MyModel.my_column)
添加回答
举报