2010-01-01 4 views
1

Dans le cadre d'un de mes projets personnels, j'ai besoin de tester les performances de différentes implémentations de mon code en Python. Je prévois que ce soit quelque chose que je fais beaucoup, et je veux essayer de rendre le code que j'écris pour servir cet objectif aussi facile à mettre à jour et à modifier que possible.Gestion du code d'installation avec TimeIt

Il est encore à ses débuts au moment, mais je l'ai pris à l'aide de chaînes pour gérer la configuration commune ou un code de test, par exemple:

naiveSetup = 'from PerformanceTests.Vectors import NaiveVector\n' \ 
+ 'left = NaiveVector([1,0,0])\n' \ 
+ 'right = NaiveVector([0,1,0])' 

Cela me permet de n'écrire une fois le code, au frais de rendre plus difficile à lire et maladroit à mettre à jour.

Y a-t-il un meilleur moyen?

Répondre

3

Utilisez triples guillemets "" »

setup_code = """ 
    from PerformanceTests.Vectors import NaiveVector 
    left = NaiveVector([1,0,0]) 
    right = NaiveVector([0,1,0]) 
""" 

Une autre méthode intéressante est fournie dans la documentation de timeit:.

def test(): 
    "Stupid test function" 
    L = [] 
    for i in range(100): 
     L.append(i) 

if __name__=='__main__': 
    from timeit import Timer 
    t = Timer("test()", "from __main__ import test") 
    print t.timeit() 

Bien que cela ne convient pas à tous les besoins

0

Timing le code est correct, mais il vous laissera quand même deviner ce qui se passe:

Pour savoir ce qui se passe réellement, mettez-le manuellement en pause quelques fois dans le débogueur et examinez la pile d'appels. Par exemple, dans le code qui est 30 fois plus lent dans une implémentation que dans une autre, chaque échantillon de la pile a 96,7% de chances de tomber dans le temps supplémentaire qu'il dépense, vous pouvez donc voir pourquoi.

Aucune approximation requise.

+0

cela n'a absolument rien à voir avec la question posée. – SilentGhost

+0

Il s'agit d'une approche novatrice, mais je ne sais pas pourquoi vous effectueriez le profilage de cette façon lorsque vous n'avez pas 1, mais 3 (au dernier compte) profileurs inclus avec Python: cProfile, profile et hotshot. Voir http://docs.python.org/library/profile.html#instant-user-s-manual –

+0

@SilentGhost: L'OP a dit "J'ai besoin de tester les performances de différentes implémentations". –