Nov 22, 2024

Wiki

Python

Aide

edit SideBar

Search

Timeit


Présentation

Le module timeit permet de déterminer le temps d'exécution de courts programmes Python. Il utilise une fonction temps spécifique à la plateforme considérée.

Le coût dû au démarrage ou à l'arrêt du programme est enlevé, en exécutant ce dernier plusieurs fois.

Le constructeur Timer

Il n'y a qu'une classe publique dans le module timeit, à savoir Timer. Le constructeur de cette dernière reçoit une expression (chaîne de caractères) à chronométrer, et une expression de configuration (pour initialiser les variables, par exemple).

Ces deux arguments sont des chaînes de caractères.

Les méthodes timeit et repeat

Utilisation élémentaire

Considérons le bout de code suivant...

  >>> import timeit
  >>> t = timeit.Timer("print 'exécution principale'",
  ...                  "print 'configuration'")

La méthode timeit() :

  • lance une fois l'expression fournie en deuxième argument du constructeur Timer : c'est la partie configuration,
  • exécute le premier argument du constructeur 1000000 fois de suite,
  • retourne la moyenne des exécutions.

On peut spécifier un autre nombre d'exécutions en argument de timeit, ce qui donne...

  >>> import timeit
  >>> t = timeit.Timer("print 'exécution principale'",
  ...                  "print 'configuration'")
  >>> print t.timeit(3)
  configuration
  exécution principale
  exécution principale
  exécution principale
  0.000208854675293

On peut encore répéter cela plusieurs fois, avec la méthode repeat et récupérer la liste des temps d'exécution :

  >>> print t.repeat(2, 3)
  configuration
  exécution principale
  exécution principale
  exécution principale
  configuration
  exécution principale
  exécution principale
  exécution principale
  [0.00019812583923339844, 0.00019383430480957031, 0.00019383430480957031]

Exemple

On souhaite calculer le temps nécessaire à obtenir $n$ termes de la suite de Fibonacci, en utilisant la relation de base $\left\{ \begin{array}{l} u_0 = u_1 = 1\\ u_{n+2} = u_n + u_{n+1} \end{array} \right.$

On peut procéder ainsi :

  >>> import timeit
  >>> t = timeit.Timer('''
  ... c=a+b
  ... a=b
  ... b=c
  ... print c''','a,b=1,1')
  >>> t.timeit(10)  
  2 
  3
  5 
  8
  13
  21
  34
  55
  89
  144
  0.00011301040649414062

Dans le constructeur Timer, on a fourni la relation de récurrence, ainsi que les termes initiaux de la suite en second argument. On retrouve bien les termes de la suite, suivi du temps total.

Tester un programme

Si vous avez créé un programme toto.py, dont vous voulez calculer le temps d'exécution, alors lancez python, et procédez ainsi :

  >>> import timeit
  >>> t=timeit.Timer('import toto','')
  >>> t.timeit()

Si vous souhaitez tester une fonction, mettez-là dans un fichier .py, et procédez comme ci-dessus.

A partir de la ligne de commande

timeit fournit aussi une interface en ligne de commande, directement accessible à partir du shell (sans lancer python en mode interactif, donc, ni exécuter un code .py).

Pour se faire, on utilise la commande suivante, qui traite le module passé en argument comme un programme principal :

  $ python -m timeit

Par exemple, pour obtenir de l'aide :

  $ python -m timeit -h

Le fonctionnement est ici un peu différent de ce qui précède. Par exemple,

  $ python -m timeit -s "d={}" "for i in range(1000):" "  d[str(i)] = i"
  10 loops, best of 3: 16.7 msec per loop

correspond au code python :

  >>> d = {}
  >>> for i in range(1000):
  ...     d[str(i)] = i
  ...

On s'aperçoit que :

  • chaque ligne du code est transformée en expression entre guillemets dans la ligne de commande,
  • les espaces en début de ligne figurent en début d'expression.

Page Actions

Recent Changes

Group & Page

Back Links