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)
添加回答
舉報