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

同时运行多份Python脚本处理数千CSV文件越跑越慢的原因是什么

性能下降核心原因
  • 无效检查开销随已处理文件数指数级上涨:代码中if i in os.listdir('E:\\Tanmay\\Data\\Zerodha another\\')逻辑写在循环内部,每处理1个文件都要全量遍历一次目标目录的所有文件做匹配。随着已处理文件数量涨到3000左右,单次os.listdir的耗时会从几毫秒涨到上百毫秒,5个进程同时高频调用该接口,会直接占满磁盘元数据查询IO,绝大多数资源都浪费在无效的列表遍历匹配上,而非实际CSV处理逻辑。
  • 无任务拆分导致竞态冲突与重复消耗:所有运行的脚本副本都遍历完整的5000个文件列表,未做任务分片。多个进程会同时争抢同一个未处理文件,不仅存在大量重复的文件存在性校验,还可能触发写入冲突导致文件锁,进程阻塞等待进一步拖慢整体速度。
  • 磁盘IO达到瓶颈:CSV处理属于IO密集型任务而非CPU密集型。如果E盘为机械硬盘,多进程同时随机读写会导致磁盘寻址时间飙升,当已处理文件较多时,写入新文件的随机IO开销远高于单进程顺序读写开销,最终整体速度反而比单进程更慢。
优化方案
  • 预拆分任务:提前把5000个文件列表拆成和进程数相等的子集,每个进程仅处理自己分配到的子列表,完全避免跨进程任务冲突和重复校验。
  • 移除循环内高开销操作:把目标目录的os.listdir操作移到循环外部,仅执行一次拿到已处理文件的集合,后续循环直接用if i in 已处理集合做判断,查询时间复杂度从O(n)降到O(1)。
  • 控制进程数量:IO密集型任务无需按CPU核数开进程,机械硬盘建议开23个进程即可,固态硬盘可适当开到34个,避免过多进程抢占IO资源。
  • 替换存储格式:如果业务允许,将CSV替换为parquet、feather等列式存储格式,读写速度可提升5~10倍,存储空间占用也会大幅降低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:57:00