Python中的多线程读取文件

时间:2015-08-07 09:45:42

标签: python multithreading python-2.7

我是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函数正在读取文件的每一行并获取有用信息并返回每个文件的列表,我将其与文件列表连接,以便我可以在一个列表中获取所有信息。

我想要实现的是一些方法,我可以通过这种方式并行处理文件而不是一次读取一个文件。

有人可以帮忙。

2 个答案:

答案 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模块并以二进制形式存储)。