升级Python至3.12.0后Cloud Function调用Dataflow出现超时提示
解决Cloud Function升级Python3.12后Dataflow调用的超时提示问题
问题根源
升级到Python3.12后,googleapiclient默认使用的httplib2传输层不再支持单请求级别的超时设置,必须在构建httplib2.Http实例时就指定全局超时参数,否则会触发提示。之前用socket.setdefaulttimeout的方式无效,因为这是全局socket层面的超时设置,和httplib2实例自身的超时配置不关联。
修复代码
直接创建带超时的httplib2.Http实例,传入build方法替换默认客户端:
from googleapiclient.discovery import build import httplib2 def run_dataflow_template(project_id, gcsPath, job_name, parameters): ''' run dataflow template ''' # 构建带超时的httplib2实例,这里设置180秒超时 http_client = httplib2.Http(timeout=180) dataflow = build('dataflow', 'v1b3', cache_discovery=False, http=http_client) request = dataflow.projects().templates().launch( projectId=project_id, gcsPath=gcsPath, body={'jobName': job_name, 'parameters': parameters, } ) return request.execute()
关键说明
- 通过
httplib2.Http(timeout=180)设置的超时会作用于该实例发起的所有请求,单位为秒,可根据实际需求调整数值。 - 将自定义的http实例传入
build方法的http参数,替代默认的无超时配置实例,即可消除目标提示。
内容的提问来源于stack exchange,提问作者Winston Kyu
相关产品推荐
相关产品推荐

