gpt4 book ai didi

python-3.x - gcp firestore上的python超时流方法

转载 作者:行者123 更新时间:2023-12-03 08:41:13 25 4
gpt4 key购买 nike

我正在使用 GCP firestore。由于某种原因,我正在查询集合中存在的所有文档。我正在使用 python API。我正在使用的代码

db=firestore.Client()
documents = db.collection(collection_name).stream()
for doc in tqdm(documents):
#some time consuming operation.(2-3 seconds)

一切运行正常,但 1 分钟后,for 循环结束。我想也许连接超时了。我在文档页面上找到了这个。

The underlying stream of responses will time out after the max_rpc_timeout_millis value set in 
the GAPIC client configuration for the RunQuery API. Snapshots not consumed from the iterator
before that point will be lost.

我的问题是如何修改此超时值以满足我的需要。谢谢。

最佳答案

就我而言,503 数据存储操作超时,或者数据暂时不可用。 来自 Firestore 的响应也导致 AttributeError: '_UnaryStreamMultiCallable' 对象没有属性 '_retry '

这看起来像是没有设置重试策略,尽管 Python 的 firebase_admin 包也能够重试超时错误。因此,我刚刚显式配置了一个基本的 Retry 对象,这解决了我的问题:

from google.api_core.retry import Retry
documents = db.collection(collection_name).stream(retry=Retry())

在我的例子中,5 分钟内导出了 190K 项的集合。本来迭代也已经在60秒后中断了。

与直觉相反,正如文档中提到的,.stream()整个集合消耗的累积超时,并且没有单个项目或 block 检索。

因此,如果您的集合有 1000 个项目,并且每个项目处理需要 0.5 秒,消耗时间将总计为 500 秒,这大于默认(未记录)超时 60 秒。

同样违反直觉的是,CollectionReference.stream 方法的 timeout 参数不会覆盖中提到的 max_rpc_timeout_millis文档。事实上,它的行为类似于客户端超时,操作在 min(max_rpc_timeout_millis/1000, timeout) 秒后有效超时。

关于python-3.x - gcp firestore上的python超时流方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62734229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com