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 :

Temps d'exécution d'un programme ! [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 28
    Par défaut Temps d'exécution d'un programme !
    Bonjour,
    SVP combien dure une simple opération dans un programme Python;
    par exemple:
    ** s=a+b (les trois sont des variables)
    ** print("Hallo")
    ** if a!=0: print("**")

    Ou encore; qu'est ce qui rend python treeees lent par rapport à C++ ?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 159
    Par défaut
    bonjour,

    pour le temps voir la FAQ https://python.developpez.com/faq/?p...ortion-de-code.

    Python est à typage dynamique contrairement aux C ou C++ qui sont statiques, Python est interprété et non compilé nativement sont des raisons qui fait que Python est 'lent'.
    Après des solutions existent pour accélérer un code Python. d'autres personnes ici pouront surement d'expliquer plus en détails ce que tu demandes

  3. #3
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 1
    Par défaut
    salut à toi,

    Ne connaissant pas la réponse, j'ai décidé d'experimenter la chose.

    Je suis d'abord parti vers une méthode un peu naïve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import time
     
    now = time.time()
    print("Hallo") 
    new_now = time.time()
    print("\n\nDébut du chrono : ", now)
    print("Fin du chrono : ", new_now)
    print("\n\nTemps total d'execution : ", new_now - now,"\n\n")
    J'ai fait une etude statistique et j'ai trouver une moyenne d'ordre de grandeur 10^-1 sec
    Nom : Capture d’écran 2018-08-02 à 06.17.16.png
Affichages : 4042
Taille : 24,9 Ko

    Ensuite j'ai décider de creuser un peu le problème en essayant de maximiser l'incertitude. En premier lieu, j'ai fait un programme permettant de s'arrêter au bout de 10 sec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import time
     
    now = time.time()
    print("Top : ", now, "\n")
    future = now + 10
    while time.time() < future:
        pass
    new_now = time.time()
    print("\n\nDébut du chrono : ", now)
    print("Fin du chrono : ", new_now)
    print("\n\nTemps total d'execution : ", new_now - now,"\n\n")
    Ensuite je veux savoir combien est-ce que je peux faire de print("Hallo") en 10 sec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import time
     
    now = time.time()
    print("Top : ", now, "\n")
    future = now + 10
    while time.time() < future:
        print("Hallo")
    new_now = time.time()
    print("\n\nDébut du chrono : ", now)
    print("Fin du chrono : ", new_now)
    print("\n\nTemps total d'execution : ", new_now - now,"\n\n")
    Je trouve une moyenne de temps d'execution du programme ainsi qu'une moyenne de print effectuer
    Nom : Capture d’écran 2018-08-02 à 06.17.05.png
Affichages : 4289
Taille : 37,4 Ko

    A partir de là je calcule un temps d'execution de l'ordre de 10^-1 sec pour un print("Hallo")

    Donc j'en déduit que le temps d'execution d'un programme pour un print("Hallo") est de l'ordre de 10^-1 sec

    /!\ Verifier si l'experience est bonne

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut,

    Le print dans un terminal est un mauvais exemple. Cette opération est lente dans tous les cas et Python n'y est pour rien.

    Python peut aussi être foudroyant de rapidité.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    >>> def printhello(numb):
    ...     with open("test", "w") as outf:
    ...             now = time.time()
    ...             for i in range(numb):
    ...                     outf.write("Hello\n")
    ...             end = time.time() - now
    ...             print("Done at %s sec." % end)
    ... 
    >>> printhello(10000)
    Done at 0.00513768196105957 sec.
    >>> printhello(10000)
    Done at 0.004895687103271484 sec.
    >>> printhello(10000)
    Done at 0.004845619201660156 sec.
    >>>
    >>> printhello(100000)
    Done at 0.04604196548461914 sec.
    >>> printhello(100000)
    Done at 0.04279971122741699 sec.
    >>> printhello(100000)
    Done at 0.045269012451171875 sec.
    >>>
    >>> printhello(1000000)
    Done at 0.4196631908416748 sec.
    >>> printhello(1000000)
    Done at 0.4208660125732422 sec.
    >>> printhello(1000000)
    Done at 0.4214498996734619 sec.
    >>>

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    +1 avec VinS

    - print est lent par définition.
    - Quant on teste des opérations élémentaires (voire un peu moins élémentaire mais rapide d'éxécution), on chronomètre sur une répétition (de plein d'itération). Car si votre machine est occupé à faire autre chose pile au moment où vous lancez votre test, et bien sont temps d'éxécution se voit complètement faussé.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Citation Envoyé par achkarfach Voir le message
    Bonjour,
    SVP combien dure une simple opération dans un programme Python;
    par exemple:
    ** s=a+b (les trois sont des variables)
    ** print("Hallo")
    ** if a!=0: print("**")

    Ou encore; qu'est ce qui rend python treeees lent par rapport à C++ ?

    Merci d'avance
    Python, comme le C++, sont des langages avec des utilisations qui diffèrent selon les besoins. Ce qu'il y a d'intéressant c'est de pouvoir coller du code C/C++ avec du code Python quand le besoin de performance se fait sentir (voir cython, numba, swig, ...).

    Il n'y a pas trop d'intérêt à les comparer, mais plutôt de savoir comment utiliser chacune de leur force. L'avantage de Python est de permettre de créer rapidement du code testable et fonctionnel sans se préoccuper de la gestion mémoire (garbage collector). Ça permet de gagner beaucoup de temps de développement.

    Avant de prouver qu'un code Python n'est pas suffisamment performant, on peut utiliser énormément de bibliothèques optimisées se rapprochant des performances du C/C++ et qui permettent des temps d'exécution tout à fait acceptable (numpy, pandas, ...). La dernière tentative parmi beaucoup d'autres reste souvent la glue du code C/C++.

    --------------------------------------------

    Concernant le test du code ci-dessus, il y a très peu d'intérêt à le faire, et pour un débutant, il n'est pas important de se préoccuper de la vitesse d'exécution, à moins d'avoir un projet en tête et une expérience en algorithmie démontrant qu'à un moment donné Python va bloquer quelque part. Mais là je te mets au défi de le prouver...

    Bonne journée !

  7. #7
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Tes 3 derniers print tu peux les combiner en 1 seule instruction...

    Il doit être possible d'utiliser un buffer, ça accélèrerait le bouzin.

    Si tu veux optimizer ton code, tu dois passer par des tests de performance:
    https://docs.python.org/3.7/library/profile.html

  8. #8
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    2 petits ajouts aux messages précédents.

    - Python, langage interprété permettant des développements faciles et rapides, passe la main le plus souvent à des modules DEJA écrits en C ou en C++. On a ainsi le "meilleur des 2 mondes". C'est particulièrement le cas dans les modules spécialisés pour le calcul scientifique (ex: numpy) ou les applications graphiques (ex: PyQt). Et, comme ça a déjà été dit plus haut, on peut faire soi-même des modules pour Python écrits en C ou en C++.

    - Le plus souvent, le problème n'est pas d'avoir le langage "le plus rapide possible" (assembleur?), mais le langage le plus adapté aux applications qu'on développe. Par exemple, si dans un conversationnel avec l'utilisateur, une réponse qui arrive sous 1/10s suffit, ce n'est vraiment pas utile de prendre un langage plus compliqué pour faire une réponse sous 1/100s! La qualité, c'est le "juste nécessaire"...

  9. #9
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    L'avantage de Python, comme d'autres langages scriptés comme Perl, c'est de créer ton programme comme tu le souhaites.
    Un "légo" ou une "nouvelle recette" si tu veux.

    A toi de trouver les bons ingrédients et de composer...

    Actuellement, je refais une application "old style" en terminal.
    Que c'est rapide
    Rien à voir avec un browser, jquery, une db distante, même si c'est aussi rapide mais on perd vite cette réactivité...
    Tout est en local

  10. #10
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par tyrtamos Voir le message
    le problème n'est pas d'avoir le langage "le plus rapide possible" (assembleur?)
    je suis d'accord, le problème n'est pas d'avoir le langage le plus rapide possible, mais non, l'assembleur n'est pas plus rapide que Python; c'est moins le langage utilisé que la qualité du programmeur qui fait la différence dans +99% des cas, c'est une des légendes urbaines les plus courantes en programmation, et accessoirement un gars comme Michael Abrash qui le dit dans ses articles sur l'optimisation de code en C/C++ et assembleur

  11. #11
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour BufferBob

    Citation Envoyé par BufferBob Voir le message
    mais non, l'assembleur n'est pas plus rapide que Python
    J'avais bien mis un '?' avec le mot assembleur ... Mais j'ai déjà pas mal programmé en assembleur, surtout pour faire des pilotes avec des périphériques rares, et je vois mal comment on pourrait faire plus rapide: on travaille au niveau des instructions CPU! Pour autant, bien sûr, que le programme soit bien fait.

  12. #12
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    J'avais bien mis un '?' avec le mot assembleur ... Mais j'ai déjà pas mal programmé en assembleur (...)
    oui, c'était une remarque générale en fait, je te mentionne parce que tu en parlais mais ça n'avait rien de ciblé disons

    Citation Envoyé par tyrtamos Voir le message
    surtout pour faire des pilotes avec des périphériques rares, et je vois mal comment on pourrait faire plus rapide: on travaille au niveau des instructions CPU!
    mais la programmation de drivers c'est précisément un cas à part, puisqu'on est tellement obligé d'être au plus proche de la machine qu'on a souvent pas d'autre choix que d'y incorporer des morceaux d'assembleur
    pour autant il y a un paquet de drivers qui sont écrits 100% en langage C, est-ce que ça veut dire qu'ils sont lents/inefficaces ? est-ce que si on les ré-écrivait en assembleur ils seraient forcément plus rapides ? évidemment que non.

    mon propos était donc de souligner d'une part que ce n'est pas le langage qui fait la vitesse du code, c'est le code lui-même, et d'autre part que c'est une erreur que beaucoup de gens font, programmeurs chevronnés y compris

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 696
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    pour autant il y a un paquet de drivers qui sont écrits 100% en langage C, est-ce que ça veut dire qu'ils sont lents/inefficaces ? est-ce que si on les ré-écrivait en assembleur ils seraient forcément plus rapides ? évidemment que non.
    Programmer en assembleur pouvait se justifier (côté performances) dans les années 70-80.

    A cette époque, on ne savait pas encore écrire de bons compilateurs et le jeu d'instruction des processeurs CISC s'y prêtait. A la fin des années 80s, on a sorti des architectures RISC et fait de gros progrès dans la compilation pour pouvoir les utiliser. Car il est très difficile de coder proprement en assembleur sur ce type d'architecture ( car en général elles sont superpipelinées et supescalaires).

    De nos jours les familles de processeurs se sont réduites au X86 (qui est CISC sur un cœur RISC), ARM et Power (qui sont RISC).... et on a de bon compilateurs qui permettent même d'insérer les quelques instructions d'assembleur indispensables à l'écriture de drivers.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/05/2008, 19h15
  2. temps d'exécution d'un programme
    Par tapouni dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/05/2008, 16h14
  3. Mesurer le temps d'exécution d'un programme
    Par ArthurC dans le forum Pascal
    Réponses: 3
    Dernier message: 21/04/2008, 14h28
  4. Connaitre le temps d'exécution d'un programme
    Par ypascal dans le forum MATLAB
    Réponses: 2
    Dernier message: 02/07/2007, 18h01
  5. Temps d'exécution d'un programme
    Par temar dans le forum Prolog
    Réponses: 3
    Dernier message: 14/06/2006, 21h17

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