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
Aller à : navigation, rechercher

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 !

Geany