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 :

incompréhension performance while ou de timeit [Python 3.X]


Sujet :

Python

  1. #1
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut incompréhension performance while ou de timeit
    bonjour,

    alors voilà j'ai un petit problème où timeit ne semble pas se mettre d'accord avec lui même,

    d'un coté en session interactive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> timeit.timeit("while i<10**5: i+=1", setup="i=0", number=1)
    0.010640200000011646
    >>> timeit.timeit("while i<10**6: i+=1", setup="i=0", number=1)
    0.08264850000000479
    >>> timeit.timeit("while i<10**7: i+=1", setup="i=0", number=1)
    0.9207111000000054
    >>> timeit.timeit("while i<10**8: i+=1", setup="i=0", number=1)
    8.68150079999998
    bon, si j'avais voulu être très précis j'aurais fait le test quelques dizaines de fois mais ce n'est même pas la peine.

    en ligne de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (venv_temp) D:\>python -m timeit -s "i=0" "while i<10**5: i+=1"
    5000000 loops, best of 5: 47.7 nsec per loop
     
    (venv_temp) D:\>python -m timeit -s "i=0" "while i<10**6: i+=1"
    5000000 loops, best of 5: 66.4 nsec per loop
     
    (venv_temp) D:\>python -m timeit -s "i=0" "while i<10**7: i+=1"
    1 loop, best of 5: 847 msec per loop
     
    (venv_temp) D:\>python -m timeit -s "i=0" "while i<10**8: i+=1"
    1 loop, best of 5: 6.98 sec per loop
    les 2 tests ont été fait sur le même env (Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)] on win32)

    Si quelqu'un à une idée de pourquoi c'est à peu près proportionnel d'un coté et de l'autre pas du tout ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Je ne comprends pas tout mais si cela peut t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    timeit.timeit("while i<10**5: i+=1", setup="i=0", number=1)
    Out[3]: 0.004092907998710871
     
    timeit.timeit("while i<10**6: i+=1", setup="i=0", number=1)
    Out[4]: 0.03908805999890319
     
    timeit.timeit("while i<10**7: i+=1", setup="i=0", number=1)
    Out[5]: 0.3894089220011665
     
    timeit.timeit("while i<10**8: i+=1", setup="i=0", number=1)
    Out[6]: 3.755811883998831
    et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    marco5@marco5-All-Series:~$ python3 -m timeit -s "i=0" "while i<10**5: i+=1"
    10000000 loops, best of 3: 0.0252 usec per loop
    marco5@marco5-All-Series:~$ python3 -m timeit -s "i=0" "while i<10**6: i+=1"
    10000000 loops, best of 3: 0.0287 usec per loop
    marco5@marco5-All-Series:~$ python3 -m timeit -s "i=0" "while i<10**7: i+=1"
    10 loops, best of 3: 38.4 msec per loop
    marco5@marco5-All-Series:~$ python3 -m timeit -s "i=0" "while i<10**8: i+=1"
    10 loops, best of 3: 374 msec per loop
    Dans le premier cas, timeit est importé au préalable. Peut-être que dans le second, il est importé à chaque fois ?
    Pas d'aide par mp.

  3. #3
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Je n'ai vraiment aucune idée du pourquoi du comment,
    ce qui est incompréhensible c'est cet écart qu'il peu y avoir chez moi entre 10**7 et 10**8
    Il semble également mes performances se dégradent assez vite pètent littéralement un câble en ligne de commande mais reste cohérentes en session interactive là où les vôtres évoluent de manières proportionnelles.

    pouvez vous pousser le test un peu plus loin avec votre machine, peu être que vous aurez les mêmes effets que moi quelques puissances après.
    si vous faites le test sur une distribution classique et non anaconda que ce passe t'il ?

    ps: en testant sur mon antique laptop (Celeron 900, recyclé en serveur à tout faire) et j'ai exactement la même chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    user@linux-server:~/MDL$ ./venv_bot/bin/python -m timeit -s "i=0" "while i<10**6: i+=1"
    2000000 loops, best of 5: 98.1 nsec per loop
    user@linux-server:~/MDL$ ./venv_bot/bin/python -m timeit -s "i=0" "while i<10**7: i+=1"
    1 loop, best of 5: 846 msec per loop
    user@linux-server:~/MDL$ ./venv_bot/bin/python -m timeit -s "i=0" "while i<10**8: i+=1"
    1 loop, best of 5: 8.47 sec per loop

  4. #4
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    J'ai continué mais là c'est long (les 10 loops) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    marco5@marco5-All-Series:~$ python3 -m timeit -s "i=0" "while i<10**9: i+=1"
    10 loops, best of 3: 3.73 sec per loop
    Je suis sous linux Ubuntu, pas d'anaconda.
    En console, je suis sous spyder.
    Pas d'aide par mp.

  5. #5
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    je pense avoir compris le problème en fin de compte, c'est vraiment une erreur bête
    Le setup n'est pas réinitialisé à chaque fois (c'est logique en même temps), et quand il y a beaucoup de loops 2000000 à 10^6 contre 1 seule à 10^7 le test est biaisé.


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

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/11/2010, 10h38
  2. Réponses: 9
    Dernier message: 19/05/2009, 22h42
  3. Réponses: 1
    Dernier message: 24/10/2008, 17h49
  4. Problème performances Local Vs Reseau incompréhensible
    Par petozak dans le forum VBA Access
    Réponses: 3
    Dernier message: 27/10/2007, 14h03
  5. boucles while/for : syntaxe incompréhensible
    Par Loceka dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 14/12/2006, 21h04

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