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

通过VPN导出CSV至共享盘时pandas.to_csv速度过慢求助

问题分析与解决建议

核心原因拆解

  • IO操作粒度的差异:pandas.to_csv默认是小批量/逐行写入,每一次小IO都会触发VPN和网络共享盘的往返延迟。哪怕单次延迟只有几十毫秒,累积成上千次操作后,总耗时就会被放大到几分钟。而shutil.copy2是大文件连续批量传输,能把带宽利用率拉满,延迟的影响被大幅摊薄。
  • 共享盘元数据开销:网络共享盘(如SMB/NFS)对文件元数据的更新(比如写入时实时修改文件大小、更新目录索引)开销远高于本地磁盘。to_csv在写入过程中会频繁触发元数据更新,而copy2是写完整个文件后一次性更新元数据,总开销小很多。
  • pandas写入机制的放大效应:to_csv默认的缓冲机制较弱,加上处理不同数据类型时的额外转换步骤,在网络IO场景下会进一步放大延迟问题。而你测试的parquet是列式批量写入,文件体积更小,天然适配高延迟的网络存储,所以速度差异明显。
  • 环境延迟差异:办公室内Python和PyCharm都在共享盘,属于局域网内的本地IO,延迟极低;居家时本地Python通过VPN跨网访问共享盘,网络延迟更高,小IO的累积效应被进一步放大。

可行解决方案

  • 保持「本地写入+复制」的方案:这是目前验证最有效的方法,既避免了小IO的延迟累积,还能降低网络中断导致文件损坏的风险。
  • 优化to_csv的写入参数:
    • 增大chunksize参数,让pandas每次写入更大的数据块,减少IO次数:
      df.to_csv("shared_drive_path.csv", chunksize=20000)
      
    • 启用大缓冲区,减少系统调用次数:
      df.to_csv("shared_drive_path.csv", buffering=1024*1024*15)  # 15MB缓冲区
      
  • 替换为更高效的文件格式:如果业务允许,优先使用parquet、feather这类列式存储格式,它们的批量写入机制更适配网络共享盘,且文件体积远小于CSV,传输效率更高。
  • 排查网络与共享盘配置:联系IT部门确认VPN是否针对小数据包有额外的加密策略,或者共享盘是否开启了客户端缓存功能——开启缓存能减少重复的元数据请求,降低延迟。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:12:18