53 votes

Utilisation des résultats cProfile avec KCacheGrind

Je suis en utilisant cProfile pour le profil de mon programme Python. Basé sur cette discussion , j'étais sous l'impression que KCacheGrind pu analyser et d'afficher le résultat de cProfile.

Cependant, lorsque je vais pour importer le fichier, KCacheGrind affiche simplement un "Format de Fichier Inconnu" erreur dans la barre d'état et se trouve là, l'affichage de rien.

Est-il quelque chose de spécial que je dois faire avant ma profilage stats sont compatibles avec KCacheGrind?

...
if profile:
    import cProfile

    profileFileName = 'Profiles/pythonray_' + time.strftime('%Y%m%d_%H%M%S') + '.profile'

    profile = cProfile.Profile()
    profile.run('pilImage = camera.render(scene, samplePattern)')

    profile.dump_stats(profileFileName)
    profile.print_stats()
else:            
    pilImage = camera.render(scene, samplePattern)
...

Les Versions De Package

  • KCacheGrind 4.3.1
  • Python 2.6.2

90voto

Mikael Lepistö Points 1040

Avec cProfile, vous pouvez également profiler des programmes existants, sans créer de script de profilage séparé. Il suffit de lancer le programme avec le profileur

 python -m cProfile -o profile_data.pyprof script_to_profile.py
 

et ouvrir des données de profil dans kcachegrind avec pyprof2calltree, dont le commutateur -k ouvre automatiquement les données dans kcachegrind

 pyprof2calltree -i profile_data.pyprof -k
 

Par exemple, le profilage de l'intégralité du serveur de passerelle et de l'application Web se ferait comme suit

 python -m cProfile -o pyprof.out `which paster` serve development.ini
 

pyprof2calltree peut être installé avec easy_install.

17voto

J.F. Sebastian Points 102961

Vous pouvez utiliser profilestats.profile décorator ( $ pip install profilestats ) - un simple wrapper pour le module pyprof2calltree (nouvelle image de marque de lsprofcalltree.py ):

 from profilestats import profile

@profile
def func():
    # do something here
 

Le script peut être exécuté comme d'habitude. profilestats crée deux fichiers: cachegrind.out.profilestats et profilestats.prof dans les formats compatibles avec KCachegrind et cProfile en conséquence.

7voto

Adam Luchjenbroers Points 2404

Il peut être fait à l'aide d'un module appelé lscallproftree

Cet article explique comment: CherryPy - CacheGrind

Avec mon code résultant de la recherche comme suit:

...
if profile:
    import cProfile
    import lsprofcalltree

    profileFileName = 'Profiles/pythonray_' + time.strftime('%Y%m%d_%H%M%S') + '.profile'

    profile = cProfile.Profile()
    profile.run('pilImage = camera.render(scene, samplePattern)')

    kProfile = lsprofcalltree.KCacheGrind(profile)

    kFile = open (profileFileName, 'w+')
    kProfile.output(kFile)
    kFile.close()

    profile.print_stats()    
else:            
    pilImage = camera.render(scene, samplePattern)
...

Si quelqu'un connaît un moyen de faire ce qui ne nécessite pas un externe (ie. pas livré avec Python) module, je serais toujours très intéressés à entendre parler de lui.

6voto

Mike Dunlavey Points 25419

Si ce que vous essayez réellement de faire est de voir quelles parties de votre code pourraient être optimisées pour la vitesse et si vous pouvez le suspendre de manière aléatoire dans le débogueur, cette méthode fonctionne . Cela peut paraître surprenant, mais vous n'avez pas besoin de très nombreux clichés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X