17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

438<br />

Techniques avancées<br />

QUATRIÈME PARTIE<br />

profiler = hotshot.Profile("statistiques.prf")<br />

profiler.runcall(methode4)<br />

profiler.close()<br />

stats = hotshot.stats.load("statistiques.prf")<br />

# trie suivant le nombre d'appels<br />

stats.sort_stats('calls')<br />

stats.print_stats()<br />

[...]<br />

$ python profiling.py<br />

22732 function calls in 0.142 CPU seconds<br />

timeit<br />

Ordered by: call count<br />

ncalls tottime percall cumtime percall filename:lineno(function)<br />

15000 0.046 0.000 0.059 0.000 profiling.py:10(methode2)<br />

5000 0.058 0.000 0.117 0.000 profiling.py:16(methode3)<br />

2731 0.014 0.000 0.014 0.000 profiling.py:7(methode1)<br />

1 0.024 0.024 0.142 0.142 profiling.py:22(methode4)<br />

0 0.000 0.000 profile:0(profiler)<br />

hotshot peut être lourd à mettre en place lorsqu’il s’agit de mesurer rapidement les<br />

performances d’une seule fonction indépendante ou d’une séquence de code extraite.<br />

Le module timeit, introduit à la version 2.3, répond à ce besoin en fournissant un<br />

outil léger, beaucoup plus simple à mettre en œuvre.<br />

timeit fournit une classe Timer, qui prend en paramètre l’expression à mesurer, et<br />

fournit une méthode d’exécution.<br />

class Timer([stmt='pass' [, setup='pass' [, timer=]]])<br />

stmt est l’expression à mesurer, setup une éventuelle deuxième expression, qui sera exécutée<br />

avant stmt. Comme Timer désactive le garbage collector pour essayer de minimiser<br />

les différences introduites par la gestion de la mémoire qui dépend d’éléments<br />

contenus en dehors des tests, setup peut être utilisé pour le réactiver ('gc.enable()'),<br />

et ceci pour obtenir un test plus réaliste lorsque le code testé parcourt plusieurs niveaux.<br />

Le temps pris par le garbage collector n’est pas négligeable dans ces cas là.<br />

Enfin, time est une fonction qui peut être fournie pour mesurer les temps. La fonction<br />

interne utilisée par défaut se base sur la fonction système time.clock() pour MS-<br />

Windows et time.time() sous Unix, pour obtenir la même précision de 1/100e de

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!