python - 检查多个文件是否存在的最快方法

标签 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 绑定(bind),我想知道是否有办法同时查找多个路径?

(作为引用,我使用的硬盘驱动器不是固态的)。

最佳答案

你当然可以使用多线程/处理,它应该会给你一个加速。有很多不同的方法,但最简单的可能是使用 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]

关于python - 检查多个文件是否存在的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45619003/

相关文章:

java - 闩锁(用于等待异步响应)卡住 WebView(和 UI)

C# 一旦主线程休眠,所有线程停止

python - Python多重处理启动进程,但只有一个处于事件状态

python - 为什么 super(A, self).__init__() 不调用 A 的 __init__() ?

python - 在尝试组合两个数组时,我在 numpy 中遇到类型问题

python - 使用 sqlalchemy 插入行后获取主键

python - Pig中的标记化(使用python udf)

python - Convolution2D 可以处理矩形图像吗?

python - Pandas 用多列填充 DataFrame 中缺失的日期

Python epoll.register 线程安全吗?