Leer archivo grande en paralelo?

Tengo un archivo grande que necesito leer y crear un diccionario. Me gustaría que esto fuera lo más rápido posible. Sin embargo, mi código en python es demasiado lento. Aquí hay un ejemplo mínimo que muestra el problema.

Primero haz algunos datos falsos

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

Ahora aquí hay una pieza mínima de código python para leerlo y hacer un diccionario.

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

Tiempos:

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

Sin embargo, es posible leer todo el archivo mucho más rápido como:

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

Mi CPU tiene 8 núcleos, ¿es posible paralelizar este programa en python para acelerarlo?

Una posibilidad podría ser leer en grandes partes de la entrada y luego ejecutar 8 procesos en paralelo en diferentes subunidades no superpuestas, haciendo diccionarios en paralelo desde los datos en la memoria y luego leer en otra parte grande. ¿Es esto posible en Python utilizando multiprocesamiento de alguna manera?

Actualizar. Los datos falsos no eran muy buenos ya que solo tenían un valor por clave. Mejor es

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

(Relacionado conLeer en archivo grande y hacer diccionario. .)

Respuestas a la pregunta(6)

Su respuesta a la pregunta