IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Optimisation de code - parsing de données


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Par défaut Optimisation de code - parsing de données
    Bonjour à tous, je suis étudiant en license de bio et j'ai un programme de parsing de données a faire sous python.

    J'arrive à un résultat plutôt correct, le problème est le temps d'exécution du programme, près d'une demi heure, sur un macbook intel a 2GHZ et 2Go de ram...

    Et je trouve ça long...
    J'ai donc regardé un peu sur internet, le multithreading et l'optimisation de code python mais je dois avouer que c'est un peu du charabia pour moi et en plus dans un anglais pas toujours facile d'accès à mon goût...

    Alors si vous avez un peu de temps pour m'aider ce serai sympa de jeter un coup d'oeil au code, que j'ai mis en download sur free :
    http://dl.free.fr/rDwQyoKEx
    Les quatre zipés postés sont a mettre dans le même dossier (je l'ai testé sous mac et normalement, python étant portable, ca ne devrais pas poser de problème sous d'autres OS).

    Merci à tous de votre aide,
    nicom

    ps: tout commentaire sur le code est bienvenue mais faut savoir que je comprends vite si on m'explique lentement...
    pps: bien sur le code vous pouvez en faire ce que vous voulez, aucune propriété intellectuelle ou quoi ce soit...
    ppps : faites pas gaffe au nom du programme, j'étais un peu fatigué

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    Bonjour,

    avant d'envisager le multithreading, je te suggère de profiler ton code. Python inclut dans sa lib standard le nécessaire:

    http://docs.python.org/library/profile.html

    ceci va te permettre de localiser les bouts de code les plus gourmands en temps. du coup, tu peux concentrer tes efforts "localement", plutôt que "globalement".

    on apprend toujours des choses intéressantes en profilant son code (et notamment que la méthode "index" des listes est une horreur en terme d'optimisation)

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Effectivement, avant de paralléliser (ce qui reste un énorme travail, puisque le multi-threading est inutile en Python pur), il est indispensable que tu aies déjà un code optimisé.
    Par exemple, tu passes ton temps à faire des boucles for imbriquées. C'est vraiment pas optimal du tout.
    Par la suite, tu peux aussi passer par Cython pour compiler ton parseur et gagner encore de la perf, une fois le code optimisé.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonjour ,



    Pardon, mais où voyez vous du multithreading ?
    Je crois que vous vous laissez induire en erreur par l'emploi très mauvais et trompeur des nom "threads" et "threading" que fait nicom. Mais "threads" est avec un "s" , ce qui ne correspond, sauf erreur de ma part, à aucune instruction Python.
    Et "threading" est le nom d'une fonction que définit nicom, pas le nom du module threading puisque de toutes façons nicom ne fait aucune importation et que ce module est non-built-in.


    Par contre, j'ai commencé à analyser le code, ça me fait penser à la formule des Shadocks. Il y a une grosse insuffisance de conception, il va falloir corriger l'algorithme au plus haut niveau, c'est à dire la fonction La-Mal-Nommée (threading).

    À mon avis, l'objectif poursuivi par ce code doit pouvoir être exécuté en moins de 4 secondes, et je ne serais pas étonné que je dise 10 fois trop.

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Pardon, mais où voyez vous du multithreading ?
    Dans le premier message.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Par défaut
    Tout d'abords merci a tous pour vos réponses.
    En effet il y a confusion sur le multithreading.
    En fait pendant que je tentais de glaner des information pour améliorer mon code, je suis tombé sur plusieurs forum (lunixfr par ex) qui rapportaient que python 2.5, que j'utilise, n'utilise qu'un seul des 2 coeur de mon core 2 duo... Alors j'y ai vu un moyen pour booster un peu mon code...

    Mais apparemment il y est possible d'améliorer mon code plus facilement.

    J'ai suivi les conseil de kangoo voici le résultat :

    Je n'y comprends pas grands chose, mais je crois que la procédure la plus longue est le traitement des mots clefs, mais c'est assez logique puisque je dois parcourir une longue liste de mot clefs et chaque phrase de chaque article.
    Ensuite vient (la mal nommée ^^) threads() : et c'est là que le bas blesse... J'ai retourné le problème dans tout les sens, parce que je me suis rapidement rendu compte que ce code était lourd et avec l'info de kangoo sur les index et le profiling qu'il était bon de revoir sa conception.

    Mais ce que je vois pas c'est comment...
    En effet mon code fonctionne selon le modèle suivant : il y a n article.
    Je sais que chaque article débute par n1: , n2: , ..., n: . Donc je met en cache dans une variable le texte entre chaque n1, n2...

    Le problème c'est pour le dernier, du coup je recours à l'index du dernier pour créer une exception qui me permet de mettre le dernier dans mon dictionnaire.

    @eyquem : merci d'avoir lu mon code. Si tu pouvait me décrire le raisonnement qui te permet de gagner tout ce temps...
    Pour l'insuffisance de conception (vexation powaaa ), je l'ai assez mal pris au début puisque j'y ai quand même passer pas mal de temps (environ 10h).
    Certes mon niveau en programmation, notamment python, est assez naze mais bon je pensais quand même avoir produit un algorithme logique et assez bien construit...

    Citation Envoyé par Matthieu Brucher Voir le message
    Par exemple, tu passes ton temps à faire des boucles for imbriquées. C'est vraiment pas optimal du tout.
    Les boucles while sont mieux ?


    Merci encore à tous pour vos réponses,
    nicom

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 20/04/2006, 15h37
  2. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  3. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  4. GDT Descripteur de segment de code & segment de données
    Par Edouard Kaiser dans le forum x86 32-bits / 64-bits
    Réponses: 15
    Dernier message: 03/04/2004, 12h40
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo