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

如何配置requests.post的blocksize参数解决文件上传速度慢问题

解决方案

requests 库默认没有暴露底层 http.client 的blocksize配置入口,默认8KB的发送块大小是导致大文件上传速度跑不满带宽的核心原因。你可以通过自定义HTTPAdapter的方式透传该参数,调大块大小即可解决速度问题。

实现步骤

  • 自定义HTTP适配器类,重写连接池初始化逻辑,注入自定义块大小参数
  • 将适配器挂载到requests会话上,所有通过该会话发送的请求都会使用你设置的块大小
  • 按原有逻辑构造请求参数发送即可

完整可运行代码

import requests
from requests.adapters import HTTPAdapter
from urllib3.poolmanager import PoolManager

class CustomBlocksizeAdapter(HTTPAdapter):
    def __init__(self, blocksize: int = 1024 * 1024, **kwargs):
        self.blocksize = blocksize
        super().__init__(**kwargs)

    def init_poolmanager(self, connections: int, maxsize: int, block: bool = False, **pool_kwargs):
        pool_kwargs["blocksize"] = self.blocksize
        self.poolmanager = PoolManager(
            num_pools=connections,
            maxsize=maxsize,
            block=block,
            **pool_kwargs
        )

# 初始化会话,挂载适配器
session = requests.Session()
# 块大小建议设置为1MB~10MB区间,示例设置为2MB,可根据实际网络环境调整
upload_blocksize = 2 * 1024 * 1024
session.mount("http://", CustomBlocksizeAdapter(blocksize=upload_blocksize))
session.mount("https://", CustomBlocksizeAdapter(blocksize=upload_blocksize))

# 原有请求逻辑无需修改
file = {'file': open(file_name1, 'rb')}
headers = {'Authorization': 'Bearer ' + app_key}
response = session.post(url=push_chunk_url, files=file, headers=headers)

参数说明与注意事项

  • 默认块大小仅为8192字节(8KB),过小的块会触发大量系统调用与网络协议开销,是上传速度仅能达到1MB/s左右的核心原因,调整后基本可以跑满可用带宽
  • 块大小不建议设置超过10MB,过大的块会提升单次内存占用,也可能因为TCP分片机制反而降低传输效率
  • 该方案仅适配Python 3.7及以上版本,低版本Python的http.client未实现blocksize参数,无法通过该方式调整
  • 依赖要求:requests 2.0+、urllib3 1.25+,目前绝大多数Python环境的默认依赖版本都满足要求,无需额外升级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:12:33