web-dev-qa-db-fra.com

Accélérer la lecture de plusieurs fichiers de cornichons

J'ai beaucoup de fichiers de cornichons. Actuellement, je les ai lu dans une boucle mais cela prend beaucoup de temps. Je voudrais accélérer mais je n'ai aucune idée de la façon de faire ça.

Le multiprocession ne fonctionnerait pas car afin de transférer des données d'un sous-processus d'enfant aux principales données de processus doivent être sérialisées (marinées) et désérialisées.

L'utilisation de la filetage ne vous aiderait pas non plus à cause de gil.

Je pense que la solution serait une bibliothèque écrite en C qui prend une liste de fichiers à lire, puis exécute plusieurs threads (sans gil). Y a-t-il quelque chose comme ça autour?

MISE À JOUR Répondre à vos questions:

  • Les fichiers sont des produits partiels de traitement de données dans le but de ML
  • Il y a pandas.Series objets mais le dtty n'est pas connu d'avance
  • Je veux avoir de nombreux fichiers parce que nous voulons choisir facilement n'importe quel sous-ensemble
  • Je souhaite avoir de nombreux fichiers plus petits au lieu d'un grand fichier, car la désérialisation d'un grand fichier prend plus de mémoire (à un moment donné, nous avons des objets sérialisés et désérialisés)
  • La taille des fichiers peut varier beaucoup
  • J'utilise python 3.7 donc je crois que c'est cpickle en fait
  • Utiliser un cornichon est très flexible parce que je n'ai pas à vous soucier des types sous-jacents - je peux sauver quoi que ce soit
17
user2146414

Pensez à utiliser HDF5 via h5py au lieu de pickle. La performance est généralement beaucoup mieux que pickle avec des données numériques dans Pandas et numpy structures de données et il prend en charge la plupart des types de données courants et compression.

0
Chris_Rands