Самый быстрый способ многопроцессорной обработки нескольких файлов по 10K строк в Python3 - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь мультипроцессировать чтение нескольких (в нашем случае 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 Как я могу затем извлечь строки из результатов, чтобы объединить их?

Заранее большое спасибо за любую помощь!

...