在Python中,如何提高大量文件的目录的全局性能?

3

我正在使用Python 3.9遍历文件目录,并将文件发送到多进程队列。该目录有超过10m的文件,构建和处理初始文件列表可能需要长达20分钟。如何改进这个问题呢?也许有一种方法可以在不将它们首先加载到内存中的情况下递归地处理这些文件?

path = "/directory-of-files"
def is_valid_file():
   #returns true if file meets conditions
   return True

files = glob.glob(path + '/**', recursive=True)
files = filter(is_valid_file, files) #Filter valid files only
results = pool.map(setMedia, files)
1个回答

1
也许有一种方法可以在不先将文件加载到内存中的情况下递归遍历文件? glob.iglob 返回一个迭代器,它产生与 glob() 相同的值,而不会同时存储它们。
如果这并没有帮助,也许瓶颈不在于模式匹配或列表构建,而仅仅是在遍历所有文件上。你可以使用 os.listdir 编写一个简单的递归树遍历,并查看遍历目录树(不匹配文件)所需的时间。

为什么不实际解释如何使用 glob.iglob 来转换上面的代码? - eri0o
通过简单地将 glob.glob 替换为 glob.iglob,@eri0o 认为这很明显。 - Aivean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接