FAQ Python
FAQ PythonConsultez toutes les FAQ
Nombre d'auteurs : 11, nombre de questions : 188, dernière mise à jour : 14 juin 2021
La bibliothèque Psyco permet une compilation dynamique en C de vos programmes sans modification de vos sources. Il suffira d'ajouter les lignes suivantes au début de chacun de vos fichiers sources:
try
: import
psyco; psyco.full
(
)
except
: pass
Il peut cependant y avoir des interférences avec des modules de déboggage (le profiler par exemple)
Pour mesurer le temps d'exécution d'une portion de code, il suffit simplement d'utiliser la fonction time.clock() qui renvoie le temps CPU en secondes. La différence entre 2 de ces différents temps donnera le temps d'éxécution de la portion de code encadrée.
import
time
l =
range(
100000
)
tps1 =
time.clock
(
)
random.shuffle
(
l)
l.sort
(
)
tps2 =
time.clock
(
)
print
(
tps2 -
tps1)
Si vous n'avez pas besoin d'une précision très importante, l'usage de time.clock suffira
amplement. Sinon optez pour le module timeit.
Ce module propose principalement la création d'un objet timeit.Timer([stmt='pass'[, setup='pass'[, timer=<timer function>]]])
où stmt est la portion de code sous forme d'une chaîne de caractères qui va être évaluée, setup représente (toujours
sous forme d'une chaîne de caractères), les conditions d'initialisation. Ces 2 paramètres peuvent également être des objets qui sont
appelable sans arguments.
Cet objet possède 2 méthodes Timer.timeit([number=1000000]) et Timer.repeat([repeat=3[, number=1000000]]).
La première fonction retourne le temps total des instructions exécutées number fois.
La deuxième reproduit l'expérience de la première repeat fois. Le temps à considérer sera alors le minimum des temps obtenus
import
timeit
import
random
test1 =
timeit.Timer
(
"random.shuffle(l);l.sort()"
, "import random;l = range(100000)"
)
print
(
test1.timeit
(
10
))
print
(
test1.repeat
(
5
, 10
))
Il faut bien faire attention à la validation des données en sachant que la condition setup n'est exécutée qu'une seule fois au tout
début. C'est pourquoi il peut être aussi bien de travailler directement sur l'appel d'une fonction qui initialisera
elle-même les paramètres à chaque exécution. Dans ce cas-là, le paramètre setup contient simplement
l'importation de la fonction étudiée.
Autrement, il suffit de prendre comme paramètre stmt directement la fonction étudiée sous forme d'objet.
def
sort
(
):
l =
range(
100000
)
random.shuffle
(
l)
l.sort
(
)
test2 =
timeit.Timer
(
"sort()"
, "from __main__ import sort"
)
print
(
test2.timeit
(
10
))
print
(
test2.repeat
(
3
, 10
))
test3 =
timeit.Timer
(
sort)
print
(
test3.timeit
(
10
))
print
(
test3.repeat
(
3
, 10
))
Lien : Python Library Reference: timeit — Measure execution time of small code snippets