Déboguer et optimiser un script python
Ce wiki a été archivé en 2018.
Le nouveau wiki se trouve à: ressources.labomedia.org Les fonctionnalités sont désactivées: vous pouvez faire une recherche sur Google site:https://wiki.labomedia.org et découvrir La Labomedia. |
De Centre de Ressources Numériques - Labomedia
Sommaire
Exemple de script à tester
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# time_loop.py
from time import time, sleep
import cProfile
'''Au lieu de
while True:
on limite le nombre de boucle et on profile
for i in range(LOOP):
'''
LOOP = 10
def test():
for i in range(LOOP):
print(i)
sleep(1)
if __name__=='__main__':
cProfile.run('test()')
Sortie console
0
1
2
3
4
5
6
7
8
9
14 function calls in 10.010 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 10.010 10.010 <string>:1(<module>)
1 0.000 0.000 10.010 10.010 time_loop.py:21(test)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.000 0.000 {range}
10 10.010 1.001 10.010 1.001 {time.sleep}
(program exited with code: 0)
Test rapide
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# time_it.py
import timeit
def test_True():
a = 0
while True:
a += 1
if a > 10000000:
break
def test_1():
a = 0
while 1:
a += 1
if a > 10000000:
break
print timeit.timeit("test_True()",
setup="from __main__ import test_True", number=1)
print timeit.timeit("test_1()",
setup="from __main__ import test_1", number=1)
donne:
0.925482034683 0.456863880157
donc 1 va plus vite ! mais seulement en python2.7, en python3 True va un poil plus vite 0.907 pour 0.928 ! la doc
Déboguer dans geany avec pdb
Doc sur le déboggage de Sam et Max
Lancer cProfile dans un thread périodiquement
Documenter son projet
C'est des trucs pour projet pro !
Vérifier son code
pyflakes, pylint, pep8, pychecker
pychecker en python2.7
Dans geany, pychecker "%f" dans définir les commandes de construction
Bien, il ne pinaille pas des trucs de ouf, espaces ceci espace cela !! Contrôle les "import", les variables inutilisées, bref que de l'important Mais il trouve aussi des choses qui ne lui plaît pas dans la bibliothèque standard !