Question

J'utilise cprofile au profil de mon programme Python. Sur la base ce discours j'avais l'impression que KCacheGrind pourrait analyser et afficher la sortie de cprofile.

Cependant, quand je vais à importer le fichier, KCacheGrind affiche juste une erreur « Unknown Format de fichier » dans la barre d'état et est assis là rien afficher.

Y at-il quelque chose de spécial que je dois faire avant mes statistiques de profilage 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)
...

Versions de l'emballage

  • KCacheGrind 4.3.1
  • Python 2.6.2
Était-ce utile?

La solution 3

Il peut être fait en utilisant un module externe appelé lscallproftree

Cet article explique comment: CherryPy - cachegrind

Avec mon code résultant à la recherche comme ceci:

...
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é à entendre parler.

Autres conseils

Avec cprofile vous pouvez également le profil des programmes existants, sans faire un script de profilage séparé. Il suffit de lancer le programme avec profileur

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

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

pyprof2calltree -i profile_data.pyprof -k

Par exemple tout le serveur Paster profilage et webapp serait fait comme ceci

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

pyprof2calltree peut être installé avec easy_install.

Vous pouvez utiliser profilestats.profile décorateur ($ pip install profilestats) - une enveloppe simple pour pyprof2calltree module (changement de nom de lsprofcalltree.py):

from profilestats import profile

@profile
def func():
    # do something here

script peut être exécuté comme d'habitude. profilestats crée deux fichiers:. cachegrind.out.profilestats et profilestats.prof en compatible KCachegrind et formats cprofile en conséquence

Si ce que vous êtes en train d'essayer de faire est de voir quelles parties de votre code pourraient être optimisés pour la vitesse, et vous pouvez mettre en pause au hasard dans le débogueur, cette méthode fonctionne . Il peut être surprenant, mais vous n'avez pas besoin de très nombreux stackshots.

3 différents façons de profil de votre code et visualisant les résultats dans KCachegrind / Qcachegrind:

I - cprofile

1 - Profil myfunc () à partir de ipython

import cProfile
filename = 'filename.prof'
cProfile.run('myfunc()', filename)

2 - Convertir votre fichier dans un fichier kcachegrind utilisable dans votre shell

sudo pip install pyprof2calltree
pyprof2calltree -i filename.prof -o callgrind.filename.prof

3 - callgrind.filename.prof Open in kcachegrind

II - EMBEDDED cprofile

1 -. Profil quelques lignes dans votre code

import cProfile
filename = 'filename.prof'
pr = cProfile.Profile()
pr.enable()
# ... lines to profile ...
pr.disable()
pr.dump_stats(filename)

2 - Convertir votre fichier dans un fichier kcachegrind utilisable dans votre shell

sudo pip install pyprof2calltree
pyprof2calltree -i filename.prof -o callgrind.filename.prof

3 - callgrind.filename.prof Open in kcachegrind

III - Yappi

1 - Profil myfunc () de ipython ou de votre code

import yappi
filename = 'callgrind.filename.prof'
yappi.set_clock_type('cpu')
yappi.start(builtins=True)
myfunc()
stats = yappi.get_func_stats()
stats.save(filename, type='callgrind')

2 - callgrind.filename.prof Open in kcachegrind

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top