“Profiler” un programme Python

… ou comment savoir à quoi passe son temps votre nouveau programme écrit en langage Python.

Python 2.6 propose nativement un librairie nommée “hotshot” qui permets de collecter des informations sur le temps passé dans chaque fonction. Toutefois, les données collectées sont assez complexes à interpréter. Heureusement, j’ai trouvé le programme KCacheGrind qui présente les résultat sous la forme de Cushion Treemaps, comme Kdirstat.

Prenons un exemple de code simple:

[shell]import hotshot
import time
def test1():
print "test1"
time.sleep(5)

def test2():
print "test2"
time.sleep(15)

def test3():
print "test3"
time.sleep(25)

def test():
print "start"
test1()
test2()
test3()
print "end"

if __name__ == "__main__":
prof = hotshot.Profile(‘//home//ubuntu//test.prof’)
prof.start()
test()
prof.stop()
prof.close()[/shell]

Le programme comporte trois fonctions test1(), test2() et test3() qui en réalité ne sont que des pauses de 5s, 15s et 25s.

La fonction test() lance consécutivement test1(), test2() et test3().

La routine principale va enregistrer les traces de performances dans le fichier //home//ubuntu//test.prof’.

Ce fichier doit ensuite être converti au format KCacheGrind avec la commande ci-dessous:

hotshot2calltree -o //home//ubuntu//cachegrinf.prof //home//ubuntu//test.prof

Il ne reste alors plus qu’à lancer KCacheGrind afin qu’il interprète le fichier //home//ubuntu//cachegrinf.prof

kcachegrind //home//ubuntu//cachegrinf.prof

Sans titreOn y voit très clairement les trois rectangles dont la superficie est proportionnelle au temps passé dans la fonctions. Il s’agit là d’une des vues proposées par KCacheGrind.

Pour installer KCacheGrind sous Ubuntu Linux, tapez la commande ci-dessous:

sudo apt-get install -y python2.6 python-profiler kcachegrind kcachegrind-converters

A propos Olivier Olejniczak

Cofondateur de SynerGeek.fr. Passionné d'informatique, je m'intéresse plus particulièrement aux technologies de virtualisation et de stockage. J'apprécie la liberté et la quasi-absence de frontières à mon imagination qu'offre l'OpenSource et Linux. Professionnellement, je travaille exclusivement avec les outils Microsoft. Les pieds bien sur terre et ancrés dans le quotidien de l'entreprise, j'aime faire partager mes découvertes et contribuer à un meilleur usage des technologies. Vous aussi, rejoignez-nous sur Synergeek et partagez votre expérience!

Je vous propose également...

JSON dans les scripts Bash avec Ticktick 1

JSON dans les scripts Bash avec Ticktick

Je vais vous présenter l’ami du WGET par excellence. Imaginez le contexte suivant : sur …

Compiler un script PowerShell avec PS2EXE 2

Compiler un script PowerShell avec PS2EXE

J’utilise au quotidien le langage PowerShell pour gérer des serveurs Windows. Ce langage est à …