我正在开发一个 Python 项目,我需要在一个非常大的目录结构中搜索特定文件。目前,我正在使用 pathlib 模块中的 glob (或 rglob)方法,但由于文件和目录数量庞大,它的速度相当慢。
这是我当前代码的简化版本:
from pathlib import Path
base_dir = Path("/path/to/large/directory")
files = list(base_dir.rglob("ind_stat.zpkl"))
这可行,但速度太慢,因为它必须遍历大量目录和文件。理想情况下,我想将目录遍历工作划分为多个线程或进程以提高性能。是否有优化或替代库/方法可以帮助提高性能?
如何执行此操作取决于您对目录结构的了解。例如,如果base_dir的第一层有很多目录,那么您可以运行独立的线程来导航这些目录。
当然,如果您的目录嵌套很深,这可能没有多大帮助(如果有的话):
from pathlib import Path
from threading import Thread
FILENAME = "ind_stat.zpkl"
BASE_DIR = Path("/path/to/large/directory")
locations: list[Path] = []
def process(d: Path):
for f in d.rglob(FILENAME):
locations.append(f)
def main():
threads: list[Thread] = []
for f in BASE_DIR.glob("*"):
if f.name == "FILENAME":
locations.append(f)
elif f.is_dir():
threads.append(Thread(target=process, args=(f,)))
threads[-1].start()
for t in threads:
t.join()
if __name__ == "__main__":
main()
print(locations)