所以我有一个代码,从一个最初有1400多万个文件的目录中获取一个文件列表。这是一台运行Ubuntu14.04桌面的十六进制内核机器,它的内存为20GB,只需抓取一个文件列表就需要几个小时——我还没有真正计时。在
在过去的一周左右的时间里,我运行的代码只不过是收集这些文件的列表,打开每个文件以确定它是何时创建的,然后根据创建的月份和年份将其移动到一个目录中。(这些文件都是scp'd和rsync'd的,因此操作系统提供的时间戳在这一点上没有意义,因此打开了文件。)
当我第一次开始运行这个循环时,它在90秒内移动了1000个文件。几个小时后,90秒变成了2.5分钟,然后是4秒,5秒,9秒,最后是15分钟。所以我关闭了它,重新开始。在
我注意到今天收集了超过900万个文件的列表后,移动1000个文件需要15分钟的时间。我只是再次关闭进程并重新启动机器,因为移动1000个文件的时间已经攀升到90分钟以上
我曾希望找到一些方法来执行while + list.pop()风格的策略,以便在循环进行时释放内存。然后发现了几个这样的帖子,说可以用for i in list: ... list.remove(...)来完成,但这是个糟糕的主意。在
代码如下:from basicconfig.startup_config import *
arc_dir = '/var/www/data/visits/'
def step1_move_files_to_archive_dirs(files):
"""
:return:
"""
cntr