2010-10-20 5 views
2

J'essaye de faire le profilage de mon application en python. J'utilise la bibliothèque cProfile. J'ai besoin de profiler la fonction onFrame de mon application, mais cela est appelé par une application externe. J'ai essayé des tas de choses, mais pour le moment je suit dans ma méthode de onFrame:Question concernant le profilage python

runProfiler(self) 

et en dehors de ma classe je les suivantes:

o = None 

def doProfile(): 
    print "doProfile invoked" 
    o.structure.updateOrders 

def runProfiler(self): 
    print "runProfiler invoked" 
    o = self 
    cProfile.run('doProfile()', 'profile.log') 

Si cela semble étrange , c'est parce que j'ai tout essayé pour me débarrasser de l'erreur "name doProfile non défini". Même maintenant, la méthode runProfiler est appelée, et le "runProfiler invoqué" est imprimé, mais ensuite j'obtiens l'erreur qui vient d'être décrite. Qu'est-ce que je fais mal?

Répondre

1

Dans ce cas, vous devez passer le contexte nécessaire à cProfile.runctx:

cProfile.runctx("doProfile()", globals(), locals(), "profile.log") 
0

Une alternative est d'utiliser la méthode runcall d'un objet Profile.

profiler = cProfile.Profile() 
profiler.runcall(doProfile) 
profiler.dump_stats("profile.log")