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


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 39
    Par défaut optimisation de code
    Bonjour,

    Toujours concernant mon gros projet (voir discussion intitulée lecturefichier+deciames du 08/06/07 pour les détails) j'ai de nouvelles questions:

    Comment optimiser son code ?

    J'ai presque fini mon algo et pour l'instant ça marche plutot bien, seulement je l'ai fait assez vite et il me semble qu'il est loin d'etre le plus performant possible. Par exemple je n'ai pas utilisé de classe ou fonction. Je voulais donc savoir les moyens pour booster son code en python.

    De plus j'ai vu sur la F.A.Q dans la rubrique optimisation qu'il était possible de "traduire" son code en C avec la bibliothèque Psyco. Dans ce cas ci j'aimerais savoir si on peut avoir une idée du temps gagné en faisant ainsi vu que mon problème principal est mon très grand nombre de données (des centaines de millions)

    Merci bien.

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut
    l'optimisation de code est un problème essentiellement d'algorithmique et pas de langage.
    Les classes et méthodes utilisées dans les langages orientés objets servent en général à autoriser des dérivations qui permettent une spécialisation des classes.
    je ne pense pas (mais je peux me tromper) que cela améliorera les performances de ton code.
    Le C est un langage très performant car une fois compilé il n'est guère plus volumineux qui si tu avais programmé ton code en assembleur.
    mais un algo inefficace le sera en python ou en c
    Une traduction d'un programme dans un autre langage n'améliorera que marginalement les performances (optimisations réalisés par le compilateur).

    je penses que les seules éléments qui peuvent réellement améliorer les performances sont :
    - d'utiliser une version compilée et non interprétée de ton programme
    - de soigner son algo

    pour traiter des millions d'enregistrements rien ne vaut un bon vieux cobol fonctionnant sur un bon vieux mainframe

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par gerard tarquin
    je penses que les seules éléments qui peuvent réellement améliorer les performances sont :
    - d'utiliser une version compilée et non interprétée de ton programme
    - de soigner son algo
    D'où l'idée de transcrire son code Python en C... Non ?!

  4. #4
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Citation Envoyé par gerard tarquin
    l'optimisation de code est un problème essentiellement d'algorithmique et pas de langage.
    Pas forcément. Comme en Python, il n'y a aucune optimisation fait par l'interpréteur, il y a des optimisations spécifiques à Python à faire non négligeables.
    Les optimisations courantes:
    - éliminer les invariants de boucles dans les boucles for/while
    - utiliser au maximum les variables locales et des pointeurs locaux sur les fonctions d'objets souvent utilisés.
    - utiliser des tableaux plutôt que des listes (ce sont les mêmes données mais il peut-être judicieux d'utiliser un tableau suffisamment grand en gérant un indice de là où l'on est dans le tableau plutôt que de faire des milliers d'appels à append/pop/remove)
    ...



    Pour Psyco, tu n'as que 2 lignes à rajouter dans ton programme (+ l'installation de la bibliothèque). Donc tu verras immédiatement combien tu y gagnes en temps.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Guigui_
    Les optimisations courantes:
    - éliminer les invariants de boucles dans les boucles for/while
    Qu'est-ce que tu entends par invariants de boucles ? J'ai jamais entendu ce terme là...

  6. #6
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Citation Envoyé par PierreAd
    Qu'est-ce que tu entends par invariants de boucles ? J'ai jamais entendu ce terme là...
    Ce sont simplement les calculs/instructions qui seront constants/inchangées dans une boucle. C'est mieux de les faire une fois pour toute avant la boucle.

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range(10):
        for j in range(10):
            print 5 * i + j
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in range(10):
        a = 5 * i
        for j in range(10):
            print a + j

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut
    Citation Envoyé par Guigui_
    Les optimisations courantes:
    - éliminer les invariants de boucles dans les boucles for/while
    - utiliser au maximum les variables locales et des pointeurs locaux sur les fonctions d'objets souvent utilisés.
    - utiliser des tableaux plutôt que des listes (ce sont les mêmes données mais il peut-être judicieux d'utiliser un tableau suffisamment grand en gérant un indice de là où l'on est dans le tableau plutôt que de faire des milliers d'appels à append/pop/remove)
    ...
    Les éléments que tu avances sont présents dans tous les langages de programmation, les invavariants dans les boucles rendent inéfficace un code qu'il soit écrit en java, cobol, basic ou c.
    D'ailleurs les calculs du complexité d'un algo (au sens mathématique du terme) sont indépendants du langage utilisé...
    Evidemment, il faut garder un juste milieu entre l'optimisation du code et sa lisibilité.
    Je pense qu'il est dommage de traduire un code python en c sans avoir fait un peu de nettoyage.
    En traduisant un programme algorithmiquement propre en c, on y est doublement gagnant.

  8. #8
    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 gerard tarquin
    Les éléments que tu avances sont présents dans tous les langages de programmation, les invavariants dans les boucles rendent inéfficace un code qu'il soit écrit en java, cobol, basic ou c.
    Sauf qu'un compilateur qui a du temps peut les détecter tout seul, l'interpréteur Python ne fait pas ce genre de chose.

  9. #9
    Membre émérite
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Par défaut
    Oui et puis si tu code en python pour retranscrire en C. Autant programmer en C directement.

    Le python est fait pour programmer vite.
    Et il est vrai que lorsque l'on connait les truc que Guigui vient de rappeler ca peux allez vite, beaucoup plus vite.

    Il ne faut pas hésiter a poster pour l'optimisation. Faut tester.
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut
    Citation Envoyé par Miles
    Sauf qu'un compilateur qui a du temps peut les détecter tout seul, l'interpréteur Python ne fait pas ce genre de chose.
    dans ce cas précis je suis entièrement d'accord

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  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