… 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 hotshotimport 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
On 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