我正在尝试对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然后如何从结果中检索行以合并它们?
非常感谢您的帮助!