Le traitement parallèle d'un grand .fichier csv en Python

Je suis de traitement de gros fichiers CSV (de l'ordre de plusieurs go avec 10M de lignes) à l'aide d'un script Python.

Les fichiers ont différentes longueurs de ligne, et ne peut pas être chargé entièrement en mémoire pour l'analyse.

Chaque ligne est gérée séparément par une fonction dans mon script. Il faut environ 20 minutes pour analyser un fichier, et il semble que la vitesse d'accès disque n'est pas un problème, mais plutôt le traitement/les appels de fonction.

Le code ressemble à ceci (très simple). Le code utilise une structure de Classe, mais c'est similaire:

csvReader = csv.reader(open("file","r")
for row in csvReader:
   handleRow(row, dataStructure)

Donné le calcul nécessite une structure de données partagées, quelle serait la meilleure manière d'exécuter l'analyse en parallèle en Python en utilisant plusieurs coeurs?

En général, comment puis-je lire plusieurs lignes à la fois à partir d'un .csv en Python pour le transfert dans un thread/processus? En boucle avec for sur les rangées ne sonne pas très efficace.

Merci!

Peut-être Python (parce qu'il est interprété) pourrait ne pas être le bon outil pour traiter de très grands ensembles de données? Avez-vous envisagé de recoder votre calcul plus rapide, compilé, la langue (Ocaml, C++, ...)?
J'ai pensé à elle. C'est une question de dev contre la flexibilité. En ce moment j'insiste sur Python, parce que c'est tellement plus rapide de développer une analyse complexe du code.
Vous pouvez également utiliser la fh.readlines(taille) méthode de lire plusieurs MBs à la fois. Ensuite transmettre ces blocs de lignes dans un thread/processus.

OriginalL'auteur Ron | 2011-12-08