检查多个文件存在的最快方法

时间:2017-08-10 16:28:27

标签: python multithreading python-3.x

在python中检查数百万个文件路径是否存在的最佳方法是什么,识别不存在的路径?我目前正在使用单个线程,例如:

 paths_not_existing = set()
 all_file_paths = [long_list]
 for path_name in all_file_paths:
     if os.path.isfile(path_name) == False:
         paths_not_existing.add(path_name)

多线程是否有可能加快速度?具体来说,既然我认为这是I / O绑定的,我想知道是否有办法同时查找多条路径?

(在参考的情况下,我使用的硬盘不是固态)。

1 个答案:

答案 0 :(得分:0)

你当然可以使用多线程/处理,它应该给你一个加速。有很多不同的方法可以做到这一点,但最简单的可能是multiprocessing.Pool.map,它的工作方式与python内置的map函数相同,但分布在核心上。

from multiprocessing import Pool
import numpy as np
ncores = #number of cores, e.g. 8
pool = Pool(ncores) 

all_file_paths = np.array(long_array)

# create a list of booleans corresponding to whether
# each file is in your path or not.
selector = np.array(pool.map(os.path.isfile,all_file_paths))

paths_not_existing = all_file_paths[selector]