我是Python新手,从未尝试过多线程。 我的目标是读取文件集并从文件中获取一些特定数据。 我已经创建了一个完美地完成任务的代码。但由于文件很少,所以需要花费很多时间。
final_output = []
for file in os.listdir(file_path):
final_string = error_collector(file_path, file)
final_output = final_output + final_string
error_collector函数正在读取文件的每一行并获取有用信息并返回每个文件的列表,我将其与文件列表连接,以便我可以在一个列表中获取所有信息。
我想要实现的是一些方法,我可以通过这种方式并行处理文件而不是一次读取一个文件。
有人可以帮忙。
答案 0 :(得分:1)
使用mmap
可以提高阅读文件的速度。
如果要读取的数据相对较小与文件的总大小相比,那么与{{1}}结合使用是一个很好的策略。
答案 1 :(得分:0)
您想要做的是在Python中称为多处理。多线程只使用一个cpu核心。
一种方法是:
from multiprocessing import Pool
fl = os.listdir(file_path)
def fun(i):
final_string = error_collector(file_path, fl[i])
final_output = final_output + final_string
p = Pool(4)
final_output = p.map(fun, range(len(fl)))
p.terminate()
编辑:如果瓶颈确实是磁盘I / O,您可以以更好的格式存储文件(即使用pickle模块并以二进制形式存储)。