Leia arquivo grande em paralelo?

Eu tenho um arquivo grande que eu preciso ler e fazer um dicionário. Eu gostaria que isso fosse o mais rápido possível. No entanto, meu código em python é muito lento. Aqui está um exemplo mínimo que mostra o problema.

Primeiro, faça alguns dados falsos

paste <(seq 20000000) <(seq 2 20000001)  > largefile.txt

Agora, aqui está uma pequena parte do código python para ler e criar um dicionário.

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])

Horários:

time ./read.py largefile.txt
real    0m55.746s

No entanto, é possível ler o arquivo inteiro muito mais rápido como:

time cut -f1 largefile.txt > /dev/null    
real    0m1.702s

Meu processador tem 8 núcleos, é possível paralelizar este programa em python para acelerá-lo?

Uma possibilidade pode ser ler em grandes blocos da entrada e, em seguida, executar 8 processos em paralelo em diferentes sub-unidades não sobrepostas, tornando os dicionários em paralelo a partir dos dados na memória e, em seguida, lendo em outro grande bloco. Isso é possível em python usando multiprocessamento de alguma forma?

Atualizar. Os dados falsos não eram muito bons, pois tinham apenas um valor por chave. Melhor é

perl -E 'say int rand 1e7, $", int rand 1e4 for 1 .. 1e7' > largefile.txt

(Relacionado aLeia no arquivo grande e faça o dicionário .)

questionAnswers(6)

yourAnswerToTheQuestion