2 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
現(xiàn)在,如果我消除“for”循環(huán),只保留查詢,問題就會(huì)消失,內(nèi)存使用量保持在 190 Mb 不變,即使在 100 多個(gè)請(qǐng)求之后也不會(huì)增加。
query.fetch()
返回一個(gè)迭代器,而不是結(jié)果的實(shí)際數(shù)組
查看源代碼,看起來這個(gè)迭代器具有用于獲取查詢的下一頁(yè)的代碼。所以你的 for 循環(huán)強(qiáng)制它獲取結(jié)果的所有頁(yè)面。事實(shí)上,在您開始迭代之前,我認(rèn)為它實(shí)際上不會(huì)獲取任何內(nèi)容。這就是為什么刪除 for 循環(huán)會(huì)產(chǎn)生影響
不幸的是,除此之外我不確定,因?yàn)楫?dāng)您深入研究源代碼時(shí),您很快就會(huì)遇到 GRPC 存根,并且不清楚問題是否在那里。

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
嘗試使用NDB Library。對(duì)該庫(kù)的所有調(diào)用都必須包裝到上下文管理器中,這應(yīng)該保證關(guān)閉后的清理工作。這可以幫助解決您的問題:
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)
添加回答
舉報(bào)