在python3中读取多个10K行文件的多进程最快方法

时间:2019-03-19 16:45:49

标签: python-3.x multiprocessing python-multiprocessing

我正在尝试对python3脚本中每个10K行的几个(在本例中为350个)GZ文件的读取进行多处理,以进一步将它们与其他文件进行比较。

我从另一个“索引”文件中检索文件列表:

###read index file
with open( index_file, "r" ) as fi :
    i_linee = fi.read().splitlines()

files_list = [ os.path.join( dirname, l.split(",")[0]) for l in i_linee ]

我之前创建了一个函数来读取文件并返回结果:

def readlines_file(single_file) :
with gzip.open( single_file, 'rb' ) as pf :
    linee = pf.read().decode("utf-8").splitlines()
    linee = [ ll.split("\t") for ll in linee ]
return linee

然后我尝试将其传递给多进程,我需要将所有行合并到一个对象中,我认为应该将Pool用于此类工作:

with multiprocessing.Pool(processes=3) as pool:
    results = pool.map_async(readlines_file, files_list)

整个过程的执行时间为5.6654秒

如果我将其与相同的功能进行比较而不使用多重处理,则它看起来会更慢!

###NOT MULTIPROCESSING:
pz_lines = []
for f in files_list :
    pz_lines.extend(readlines_file(f))

整个执行时间3.9624秒

所以我想知道我是不是做错了什么,或者您是否认为这实际上是最快的方法?地图或其他更合适的东西吗? PS然后如何从结果中检索行以合并它们?

非常感谢您的帮助!

0 个答案:

没有答案