升级google-cloud-bigquery至3.12.0后遇requests超时值异常问题
问题
将google-cloud-bigquery从3.11.4版本升级至3.12.0版本后,已固定以下依赖版本:
requests==2.31.0 requests-futures==1.0.1 requests_pkcs12==1.21 urllib3==1.26.18
但偶尔会触发如下错误:
File "/usr/local/lib/python3.10/site-packages/google/api_core/future/polling.py", line 282, in exception self._blocking_poll(timeout=timeout) File "/usr/local/lib/python3.10/site-packages/google/cloud/bigquery/job/query.py", line 1318, in _blocking_poll super(QueryJob, self)._blocking_poll(timeout=timeout, **kwargs) File "/usr/local/lib/python3.10/site-packages/google/api_core/future/polling.py", line 137, in _blocking_poll polling(self._done_or_raise)(retry=retry) File "/usr/local/lib/python3.10/site-packages/google/api_core/retry.py", line 366, in retry_wrapped_func return retry_target( File "/usr/local/lib/python3.10/site-packages/google/api_core/retry.py", line 204, in retry_target return target() File "/usr/local/lib/python3.10/site-packages/google/cloud/bigquery/job/query.py", line 1460, in _done_or_raise self.reload(retry=retry, timeout=transport_timeout) File "/usr/local/lib/python3.10/site-packages/google/cloud/bigquery/job/base.py", line 781, in reload api_response = client._call_api( File "/usr/local/lib/python3.10/site-packages/google/cloud/bigquery/client.py", line 816, in _call_api return call() File "/usr/local/lib/python3.10/site-packages/google/cloud/_http/__init__.py", line 482, in api_request response = self._make_request( File "/usr/local/lib/python3.10/site-packages/google/cloud/_http/__init__.py", line 341, in _make_request return self._do_request( File "/usr/local/lib/python3.10/site-packages/google/cloud/_http/__init__.py", line 379, in _do_request return self.http.request( File "/usr/local/lib/python3.10/site-packages/google/auth/transport/requests.py", line 542, in request response = super(AuthorizedSession, self).request( File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 589, in request resp = self.send(prep, **send_kwargs) File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 703, in send r = adapter.send(request, **kwargs) File "/usr/local/lib/python3.10/site-packages/requests/adapters.py", line 483, in send timeout = TimeoutSauce(connect=timeout, read=timeout) File "/usr/local/lib/python3.10/site-packages/urllib3/util/timeout.py", line 102, in __init__ self._connect = self._validate_timeout(connect, "connect") File "/usr/local/lib/python3.10/site-packages/urllib3/util/timeout.py", line 147, in _validate_timeout raise ValueError( ValueError: Timeout value connect was <object object at 0x7c6b5e484a80>, but it must be an int, float or None.
已知urllib3版本已在2.x以下,仍出现该错误,寻求解决方法。
解决方案
- 显式指定请求超时参数:在调用BigQuery相关方法(如
query()、reload())时,显式传入timeout参数为整数或浮点数,避免依赖默认值传递异常对象。例如:query_job = client.query(sql, timeout=300) # 设置5分钟超时 - 检查
requests-futures兼容性:requests-futures==1.0.1版本较旧,可能与google-cloud-bigquery==3.12.0的异步请求逻辑冲突。尝试升级requests-futures到最新兼容版本,或暂时移除该依赖(若业务无需异步请求)。 - 锁定
google-api-core版本:错误可能源于google-api-core的超时处理逻辑变化,将其锁定到与google-cloud-bigquery==3.12.0兼容的稳定版本(例如2.11.0,需确认版本匹配),避免自动升级引发兼容性问题。 - 排查自定义代码超时参数:检查所有涉及BigQuery请求的代码,确保传递的
timeout参数为合法的数值或None,而非未初始化的对象。 - 回退BigQuery版本:若上述方法无效,暂时降级
google-cloud-bigquery至3.11.4版本,等待官方修复该兼容性问题。
内容的提问来源于stack exchange,提问作者idan ahal
相关产品推荐
相关产品推荐

