首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gcp防火墙上的python超时方法

gcp防火墙上的python超时方法
EN

Stack Overflow用户
提问于 2020-07-04 20:39:33
回答 1查看 408关注 0票数 0

我在用GCP的消防局。由于某些原因,我正在查询集合中的所有文档。我正在使用python。我正在使用的代码

代码语言:javascript
复制
db=firestore.Client()
documents = db.collection(collection_name).stream()
for doc in tqdm(documents):
#some time consuming operation.(2-3 seconds)

一切运行良好,但在1分钟后,for循环结束。我想可能是连接被超时了。我在文档页上找到了这个。

代码语言:javascript
复制
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.

我的问题是如何修改这个超时值,以适应我的需要。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-09-28 11:13:39

在我的例子中,Firestore的503 The datastore operation timed out, or the data was temporarily unavailable.响应也导致了AttributeError: '_UnaryStreamMultiCallable' object has no attribute '_retry'

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

代码语言:javascript
复制
from google.api_core.retry import Retry
documents = db.collection(collection_name).stream(retry=Retry())

在我的例子中,190 K项的集合在5分钟内导出。最初,迭代在60秒后也被中断。

相反,正如文档中所提到的,.stream()对整个集合消耗有一个累积超时,而不是一个项或块检索。

因此,如果您的集合有1000个项,并且每个项处理都需要0.5秒,那么总消耗时间将达到500秒,这比默认的60秒超时(无文档记录)要大。

此外,与直觉相反,CollectionReference.stream方法的参数并不覆盖文档中提到的max_rpc_timeout_millis。实际上,它的行为类似于客户端超时,并且操作在min(max_rpc_timeout_millis / 1000, timeout)秒之后被有效地超时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62734229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档