Le module time

Adresse : http://docs.python.org/3.3/library/time.html

Utilité : accéder à des mesures de durée, de dates, et effectuer des conversions durées/dates.

Syntaxe : import time, ou from time import *, ou from time import sleep, etc.

Le module time opère sur des dates exprimées en secondes depuis la date 0 du système d’exploitation (le 1er janvier 1970 sur les systèmes Unix), ou exprimées sous une forme structurée (avec indication de l’année, du mois, etc.).

Une date structurée peut être renvoyée au format GMT (Greenwich Mean Time) mais le nouveau nom est plutôt UTC (Coordinated Universal Time) ou au format local (pour tenir compte du fuseau horaire tel qu’il est réglé sur la machine).

Voici quelques fonctions du module time (on note dst une date structurée et sec une durée en secondes).

gmtime(sec)
localtime(sec)
convertit un nombre de secondes (depuis la date 0) en la date GMT structurée
convertit un nombre de secondes (depuis la date 0) en la date locale structurée
calendar.timegm(dst)
mktime(dst)
convertit une date structurée GMT en un nombre de secondes depuis la date 0
convertit une date structurée locale en un nombre de secondes depuis la date 0
asctime(dst)
ctime(sec)
strftime(f t,sec)
strptime(ch,f t)
convertit une date structurée en une chaîne plus lisible
convertit des secondes (depuis la date 0) en chaîne (date locale)
ctime(0)⇒’Thu Jan 1 01:00:00 1970’ et ctime(1e9)⇒’Sun Sep 9 03:46:40 2001’
convertit des secondes (depuis la date 0) en chaîne, avec une chaîne de formatage f t
strftime("%a, %d %b %Y %H:%M:%S", localtime())⇒ ’Sun, 03 Feb 2013 15:06:25’
convertit en date structurée une chaîne ch (date lisible), avec formatage par f t
time.strptime("30 Nov 00", "%d %b %y") ⇒ time.struct_time(tm_year=2000,...

Plusieurs fonctions permettent de mesurer des durées (c’est utile pour étudier l’efficacité temporelle d’un algorithme).

Le sujet est rendu assez compliqué par les différences qui existent entre les plateformes (Windows, Mac, etc.).

Pour plus d’informations, consulter : http://www.python.org/dev/peps/pep-0418/

Voici quelques fonctions disponibles (pour mesurer une durée, on utilisera la différence entre deux valeurs renvoyées par la fonction choisie, par exemple perf_counter, car les origines de ces “horloges” sont indéfinies).

sleep(sec) suspend l’exécution pendant le nombre indiqué sec de secondes
time() donne l’heure locale actuelle, exprimée en secondes depuis la date 0
(déconseillé pour mesurer des courtes durées, par manque de précision)
clock() valeur de l’horloge-processeur à un instant donné, exprimée en microsecondes
(efficace sous Windows, beaucoup moins sous Unix)
monotonic() horloge-processeur “monotone”, indépendante des modifications du système
perf_counter()
process_time()
horloge précise sur toutes plateformes (depuis Python 3.3)
idem, mais n’inclut pas les pauses générées par la fonction sleep

Exemple : on va comparer trois fonctions formant la liste lc des {k^2}, pour 0 ≤ k ≤ n (avec n entier passé en argument).

Ces fonctions ne renvoient pas lc (elles la fabriquent, juste), mais le temps passé (sur 6 décimales). test1 crée lc par ajouts des [k*k] (mauvais !), test2 par des append successifs (bien mieux) et test3 forme la liste en compréhension (encore mieux).

NB : on remarquera comment on a renommé localement la fonction perf_counter en pc.

Voici combien de temps mettent ces trois fonctions, pour {n=10^3}, {n=10^4} et {n=10^5} (no comment pour test1) :

Remarque : à la place de la fonction perf_counter, on aurait pu utiliser les fonctions clock, time, process_time ou monotonic. Il est difficile sur un seul exemple de se rendre compte de ce qui les différencie réellement. La documentation Python recommande en tout cas de ne pas utiliser les fonctions time ou clock (soit par leur imprécision sur des mesures de durées faibles, soit par dépendance relativement au système d’exploitation utilisé).

NB : On pourra aussi consulter les modules datetime (http://docs.python.org/3.3/library/datetime.html) et calendar (http://docs.python.org/3.3/library/calendar.html)

Retour à l’accueil du cours Python/Numpy

Sommaire du chapitre 7

  1. Le module random
  2. Le module decimal
  3. Le module fractions
  4. Le module string
  5. Le module itertools
  6. Les modules operator et functools
  7. Le module time
  8. La classe Counter du module collections
  9. La classe deque du module collections
  10. Le module heapq
  11. Le module bisect
  12. Le module copy
  13. Autres modules et adresses utiles