L'utilisation des ressources dans le fichier de lecture / écriture avec python, des options et des considérations

StackOverflow https://stackoverflow.com/questions/4273259

Question

Je développe en python, encore nouveau dans le jeu, et je veux vous assurer que j'aborde correctement ce problème. J'accepte volontiers tous les conseils.

Imaginez que vous essayez d'utiliser les données stockées dans plusieurs fichiers plats, dans de nombreux cas avec une taille combinée supérieure à 20-35 gb. Dans le cas le plus général, ces fichiers peuvent être délimités (csv, onglet) ou peuvent être simplement largeur fixe. L'objectif est de prendre ces fichiers, ou un sous-ensemble de chaque fichier, analyser l'entrée (chaque colonne représente une variable dans les données), et l'envoyer à une destination (qui pourrait être sql local ou distant, un autre fichier local dans une variété des formats de sortie, y compris du texte ou un format de données propriétaire, comme le .DTA Stata)

Le but est d'utiliser les ressources système disponibles pour effectuer cette opération le plus rapidement possible (je suppose en termes de kb par seconde?)

Questions:

  1. Y at-il un gain d'efficacité de l'utilisation compilé C pour effectuer les opérations de lecture? Si oui, quelle bibliothèque dois-je apprendre à utiliser? Et, c devrait également faire l'analyse syntaxique et de sortie?

  2. Si le fichier est dans un .zip ou .gz, si le fichier entier décompressé avant la lecture et l'écriture, ou laissez-vous qu'il est compressé et utiliser une bibliothèque capable de lire à partir du fichier compressé?

  3. cas où l'utilisation du programme multi-threading? J'imagine un sous-ensemble de lecture d'un fichier (par exemple, n lignes à la fois), l'analyse et à délivrer en, par exemple, des fils de j. Il est pas évident que la lecture du fichier une ligne à la fois est optimale ... et il semble que le nombre optimal de threads et processus dépendra des ressources disponibles et la taille de la tâche.
    Alors, peut-être le code devrait être assez « intelligent » pour déterminer de façon optimale le nombre de threads à utiliser et la quantité de travail chaque fil doit être censé faire.

  4. Comment peut-on mesurer et comparer l'efficacité entre les différentes méthodes?

  5. si le programme est en mesure de le faire de façon dynamique et choisir des méthodes de sortie d'entrée en fonction de leur performance? (Will méthode Une méthode toujours strictement B dominer, ou faire des changements idiosyncrasiques dans l'environnement de déploiement matière)

Pour être clair, je suis prêt à accepter presque tous les niveaux d'inefficacité de code en échange d'améliorations non négligeables dans l'efficacité des ressources

J'espère que ces questions donnent une idée claire de ce que je suis en train de comprendre. Mon expérience de programmation est principalement limitée aux emballages scientifiques / statistiques, donc si mes questions se résument à « rtm », s'il vous plaît être doux et suggérer le manuel approprié.

Était-ce utile?

La solution

  

Y at-il un gain d'efficacité de l'utilisation de C pour faire compilé les opérations de lecture?

Pas vraiment. La limitation sera d'E / S et la bande passante Python utilise les bibliothèques C sous-jacentes.

  

Si le fichier est dans un .zip ou .gz, si le fichier entier décompressé avant la lecture et l'écriture, ou laissez-vous qu'il est compressé et utiliser une bibliothèque capable de lire à partir du fichier compressé?

Tout d'abord, obtenir tout le reste bien au travail. Ne pas essayer de finesse ce front up. La mise en œuvre ZipFile Python peut traiter des fichiers au format CSV en ouvrant les membres d'archives ZIP sans les étendre.

Est-ce plus rapide? Vous ne pouvez pas savoir à l'avance. Vous ne pouvez savoir en construisant et en mesurer ce que vous avez construit. Ne pas essorer vos mains. Il est seulement quelques lignes de code. Construire à la fois.

  

cas où l'utilisation du programme multithread?

Non.

Utilisation OS multi-niveaux de traitement.

python something.py source.zip | python part2.py | python part3.py | python part4.py >result

Ce sera incroyablement rapide et - sans beaucoup de travail -. Utilisera tous les ressources OS disponibles

  

Comment peut-on mesurer et comparer l'efficacité entre les différentes méthodes?

Hummm ... C'est une question idiote. Vous construisez et de le mesurer. Le temps écoulé est aussi bonne mesure que toute autre chose. Si vous êtes confus, utilisez un chronomètre. Sérieusement. Il n'y a pas de magie.

  

si le programme est en mesure de le faire de façon dynamique et choisir des méthodes de sortie d'entrée en fonction de leur performance?

Non.

  

(méthode Une méthode toujours strictement B dominer, ou faire des changements idiosyncrasiques en matière d'environnement de déploiement)

Oui. Et oui. Certaines méthodes sont toujours plus efficaces. Cependant, un système d'exploitation est diaboliquement complexe, substituts de rien pour simple, flexible, la conception à base de composants.

pièces simples de construction qui peut être flexible recombinées.

Ne pas la main essorer à l'avance. Concevoir la structure de données à droite et algorithme quand vous le pouvez. Lorsque vous ne pouvez pas, choisissez juste quelque chose de sensé et de progresser. Construire quelque chose et le réglage est beaucoup plus facile que tracasser plus de détails pour découvrir qu'ils n'importaient.

  1. Construire quelque chose.

  2. Mesure.

  3. Trouver le goulot d'étranglement.

  4. Optimize uniquement les goulots d'étranglement éprouvés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top