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

如何为Python Azure存储SDK的blob_client.upload_blob设置客户端DNS超时?

解决Azure Blob存储Python SDK上传时DNS异常的客户端超时问题

你遇到的问题核心在于:upload_blob方法的timeout参数是服务端响应超时,仅控制客户端等待服务端处理请求的时间,无法覆盖DNS解析、TCP连接建立这类客户端网络层面的超时(默认90秒)。要设置更短的客户端超时,需要从底层HTTP传输层入手配置。

解决方案:自定义HTTP传输层的超时设置

Azure Python SDK底层依赖requests库处理HTTP请求,我们可以通过自定义requests.Session的超时参数,再将其传入BlobServiceClient的传输配置中,从而全局控制所有请求的客户端超时(包括DNS解析阶段)。

修改后的完整代码

from azure.core.exceptions import AzureError
from azure.storage.blob import BlobServiceClient
from azure.core.pipeline.transport import AzureRequestsTransport
import requests

# 定义Azure存储连接信息
connection_string = "DefaultEndpointsProtocol=https;AccountName=test;AccountKey=removed==;EndpointSuffix=core.windows.net"
container_name = "containername"
blob_name = "blobname"
local_file_path = "c:/temp/test.txt"

# 配置底层HTTP会话的超时:(连接超时, 读取超时),单位秒
# 连接超时包含DNS解析、TCP连接建立的时间
session = requests.Session()
session.timeout = (5, 5)

# 使用自定义会话创建传输层
transport = AzureRequestsTransport(session=session)

# 创建带自定义传输的BlobServiceClient
blob_service_client = BlobServiceClient.from_connection_string(connection_string, transport=transport)

# 执行Blob上传的函数
def upload_blob_process():
    try:
        with open(local_file_path, "rb") as data:
            blob_client = blob_service_client.get_blob_client(container_name, blob_name)
            # 这里的timeout参数仍可保留,作为服务端响应的额外阈值
            blob_client.upload_blob(data, timeout=5)
        print("Blob上传成功!")
    except AzureError as e:
        print(f"Azure服务错误:{e}")
    except Exception as e:
        print(f"发生未知错误:{e}")

upload_blob_process()

关键说明

  • session.timeout = (5,5):第一个值是连接超时(控制DNS解析、TCP握手的最长时间),第二个值是读取超时(控制客户端等待服务端返回数据的最长时间),两者都设为5秒即可满足你的需求。
  • 该配置全局生效,所有通过此BlobServiceClient发起的请求(包括获取Blob客户端、上传、下载等)都会使用这个超时设置。
  • 原upload_blob的timeout参数可保留,它作为服务端处理请求的超时阈值,和客户端超时形成双重保障。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:27:37