You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用Google Cloud Storage下载文件出现Request exception报错如何解决?

问题根因
  • 官方google-cloud-storage库默认的读取超时阈值较低,网络稍有波动就会触发ReadTimeout错误
  • 未配置请求重试逻辑,偶发的网络抖动、GCS服务端临时限流都会直接导致请求失败
  • 长闲置的连接失效后没有自动重建,复用旧连接时也会触发端口相关的连接异常
优化后代码
import requests
from google.cloud import storage
from google.api_core.retry import Retry

class GCP_Storage_Resource:
    def __init__(self):
        BUCKET_NAME = 'bucket name'
        # 初始化客户端时配置标准API端点
        storage_client = storage.Client.from_service_account_json(
            'Resources/Token/storage_private_key.json',
            client_options={"api_endpoint": "https://storage.googleapis.com"}
        )
        self.bucket = storage_client.get_bucket(BUCKET_NAME)
        # 配置统一重试策略:可重试异常最多重试3次,指数退避等待
        self.retry_strategy = Retry(
            total=3,
            backoff_factor=1,
            retry_on_exception=lambda e: isinstance(e, (
                requests.exceptions.ReadTimeout,
                requests.exceptions.ConnectionError,
            ))
        )

    def get_resource_file(self, source: str, location: str) -> None:
        blob = self.bucket.blob(source)
        # 下载时指定超时和重试策略
        blob.download_to_filename(
            location,
            timeout=60,  # 读取超时设为60秒,可根据文件大小上调
            retry=self.retry_strategy
        )


if __name__ == "__main__":
    gcp_storage_resource = GCP_Storage_Resource()
    gcp_storage_resource.get_resource_file(source='...', location='..')
优化说明
  • 拉长超时时间:将单次请求的读取超时调整为60秒,避免正常传输过程中被强制断开
  • 新增自动重试:针对ReadTimeout、连接错误等偶发可恢复异常配置指数退避重试,不需要手动干预就能解决绝大多数偶发错误
  • 连接复用:统一复用同一个客户端实例,避免反复初始化客户端导致频繁创建销毁连接占用443端口,减少端口冲突概率
额外排查建议

如果调整后仍然频繁出现超时,可优先检查本地网络环境:

  • 是否存在代理、防火墙限制443端口出站连接
  • 本地网络是否存在周期性波动,可尝试更换网络环境验证
  • 超过1GB的大文件建议改用分片下载接口,拆分传输降低单次请求超时概率

内容的提问来源于stack exchange,提问作者freshcodeman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:36:02