Читать большой файл параллельно?
У меня есть большой файл, который мне нужно прочитать и создать словарь. Я бы хотел, чтобы это было как можно быстрее. Однако мой код на python слишком медленный. Вот минимальный пример, который показывает проблему.
Сначала сделайте поддельные данные
paste <(seq 20000000) <(seq 2 20000001) > largefile.txt
Теперь вот минимальный кусок кода на Python для чтения и создания словаря.
import sys
from collections import defaultdict
fin = open(sys.argv[1])
dict = defaultdict(list)
for line in fin:
parts = line.split()
dict[parts[0]].append(parts[1])
Тайминги:
time ./read.py largefile.txt
real 0m55.746s
Однако можно прочитать весь файл намного быстрее, так как:
time cut -f1 largefile.txt > /dev/null
real 0m1.702s
Мой процессор имеет 8 ядер, возможно ли распараллелить эту программу на python, чтобы ускорить ее?
Одной из возможностей может быть чтение в больших порциях ввода и последующее параллельное выполнение 8 процессов на разных неперекрывающихся подчастях, делая словари параллельно из данных в памяти, а затем считывая их в другом большом порции. Возможно ли это как-то в python, использующем многопроцессорность?
Обновить, Поддельные данные были не очень хорошими, так как они имели только одно значение на ключ. Лучше
perl -E 'say int rand 1e7, $", int rand 1e4 for 1 .. 1e7' > largefile.txt
(Относится кЧитай в большом файле и составь словарь .)