Я пытаюсь мультипроцессировать чтение нескольких (в нашем случае 350) файлов GZ по 10 тыс. Строк в скрипте python3 для дальнейшего сравнения их с другими файлами.
Я получаю список файловиз другого файла «index»:
###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 Как я могу затем извлечь строки из результатов, чтобы объединить их?
Заранее большое спасибо за любую помощь!