拥有超过百万小(30 kB)文件的Windows 7目录显着降低了性能

时间:2017-02-08 11:03:23

标签: python windows filesystems ntfs multiple-files

在生成和使用大量小文件时,我遇到了关于脚本性能的问题。

我的磁盘上有两个目录(HDD和SSD上的行为相同)。首先是~10_000输入文件,第二个是~1_300_000输出文件。我编写了脚本来处理文件并使用Python中的multiprocessing库生成输出。

首先输出400_000-600_files(不确定当我点击'阈值')是以恒定速度生成的,并且所有8个CPU核心都以100%使用。然后它变得更糟。当达到目录中的1_000_000个文件时,性能降低20倍,核心使用率降至1-3% 我通过创建第二个输出目录并在那里写下半部分输出文件来省略此问题(我需要快速修补程序)。

现在,我有两个问题:
1)如何在Windows上用Python执行新的和写入它?这里的瓶颈是什么? (我的猜测是,在写入文件之前,如果文件已经存在于目录中,Windows会查找) 2)什么是更优雅的方式(而不是拆分成dirs)来正确处理这个问题?

1 个答案:

答案 0 :(得分:0)

如果有人遇到同样的问题,那么瓶颈就是拥挤目录中文件的查询时间。

我通过将文件拆分为由一个参数分组的单独目录来解决该问题,该参数均匀分布在20个不同的变量上。虽然现在我会以不同的方式做到这一点。

我建议使用shelve Python内置模块解决类似问题。 shelve是文件系统中的一个文件,您可以像字典一样访问它并将pickles放入其中。就像在现实生活中一样:) Example here