这个问题是关于BigQuery Python客户端中QueryJob对象的方法timeout
中的参数。result
看起来 的含义相timeout
对于 1.24.0 版本已发生变化。
例如,1.24.0 版本中QueryJob 的文档result
指出超时为:
使用重试之前等待底层 HTTP 传输的秒数。如果在后台发出多个请求,则超时将被解释为所有请求的大致总时间。
据我了解,这可以用作限制result
方法调用等待结果的总时间的方法。
例如,考虑以下脚本:
import logging
from google.cloud import bigquery
# Set logging level to DEBUG in order to see the HTTP requests
# being made by urllib3
logging.basicConfig(level=logging.DEBUG)
PROJECT_ID = "project_id" # replace by actual project ID
client = bigquery.Client(project=PROJECT_ID)
QUERY = ('SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` '
'WHERE state = "TX" '
'LIMIT 100')
TIMEOUT = 30 # in seconds
query_job = client.query(QUERY) # API request - starts the query
assert query_job.state == 'RUNNING'
# Waits for the query to finish
iterator = query_job.result(timeout=TIMEOUT)
rows = list(iterator)
assert query_job.state == 'DONE'
据我了解,如果获取结果所涉及的所有 API 调用加起来超过 30 秒,则调用将result
放弃。所以,timeout
这里起到了限制方法调用总执行时间的作用result
。
但是,后来的版本引入了更改。例如,1.27.2 中的文档result
指出超时为:
使用重试之前等待底层 HTTP 传输的秒数。如果在后台发出多个请求,则超时适用于每个单独的请求。
如果我理解正确,上面的示例的含义完全改变,并且调用result
可能需要超过 30 秒。
我的疑问是:
如果我使用新版本与旧版本运行上面的脚本,究竟有什么区别result
?
timeout
目前推荐将值传递给哪些用例result
?
在等待查询结果时,当前推荐的在给定总时间后超时的方法是什么?
谢谢。
MYYA
相关分类