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

如何在Python中实现同一共享网络内稳定5Mbps文件传输限速

稳定控制共享网络文件复制速率的解决办法

为啥你的代码会出现速率波动?

  • 一次性读取与带宽匹配的大块数据,写完直接进入延迟等待,导致瞬间占满带宽(出现10-12Mbps峰值),等待期间无数据传输,速率跌到0,形成大幅波动。
  • 仅初始化一次start_time,延迟计算逻辑未考虑读写操作本身的耗时,控制精度不足。
  • 共享网络的系统缓存会提前预读文件数据,代码层面的速率控制会被绕过,加剧速率不稳定问题。

改进后的代码:匀速小批量传输

采用小数据块+固定间隔发送的方式,像匀速滴水一样控制传输速率,避免波动:

import time

def copy_file_with_stable_bandwidth(source_path, target_path, bandwidth_mbps):
    # 将Mbps转换为每秒可传输的字节数
    bytes_per_sec = bandwidth_mbps * 1024 * 1024 // 8
    # 每次传输64KB的小块,平衡传输效率与速率稳定性
    chunk_size = 64 * 1024
    # 计算每个小块的发送间隔,确保总速率匹配目标带宽
    send_interval = chunk_size / bytes_per_sec

    with open(source_path, "rb") as source_file:
        with open(target_path, "wb") as target_file:
            last_send_time = time.time()
            while True:
                data = source_file.read(chunk_size)
                if not data:
                    break
                
                # 计算需等待的时间,保证每个块按固定间隔发送
                now = time.time()
                elapsed_since_last = now - last_send_time
                if elapsed_since_last < send_interval:
                    time.sleep(send_interval - elapsed_since_last)
                
                # 写入数据并立即刷新,避免系统缓存攒批发送
                target_file.write(data)
                target_file.flush()
                
                # 更新最后一次发送的时间戳
                last_send_time = time.time()

# 调用示例
source_path = "\\\\MYPESC0NBIT222\\Users\\1.bmp"
destination_path = "C:\\Users\\Users\\Desktop\\1.bmp"
copy_file_with_stable_bandwidth(source_path, destination_path, 5)

关键优化点说明

  • 小数据块传输:将大文件拆分为64KB的小块,避免单次传输占用过多带宽,让速率曲线更平滑。
  • 固定间隔发送:每个数据块按计算好的间隔发送,确保总传输速率稳定维持在5Mbps,不会忽高忽低。
  • 动态时间跟踪:每次传输后更新时间戳,计算延迟时自动适配读写操作的耗时,控制精度更高。
  • 规避系统缓存:小批量传输减少系统预缓存的影响,让代码层面的速率控制逻辑真正生效。

额外提示

如果共享网络的SMB缓存仍干扰速率稳定,可尝试调整系统SMB缓存设置(需管理员权限),比如缩小缓存大小以减少预读取数据量。也可以添加简单的速率监控逻辑,实时打印当前每秒传输字节数,方便验证效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:32:54