objectif
Profiler un bloc de code et résumer les fonctions les plus coûteuses.
code minimal
import cProfile, pstats, io
pr = cProfile.Profile(); pr.enable()
sum(i*i for i in range(1000))
pr.disable()
s = io.StringIO(); pstats.Stats(pr, stream=s).sort_stats("tottime").print_stats(5)
print(len(s.getvalue()) > 0) # attendu: True
utilisation
import cProfile
pr = cProfile.Profile(); pr.enable(); [x*x for x in range(1000)]; pr.disable()
print(isinstance(pr.getstats(), list))
variante(s) utile(s)
import pstats, io, cProfile
pr = cProfile.Profile(); pr.enable(); [x for x in range(100)]; pr.disable()
buf = io.StringIO(); pstats.Stats(pr, stream=buf).strip_dirs().print_stats(3)
print("function calls" in buf.getvalue())
notes
- Utilisez strip_dirs et sort_stats pour faciliter la lecture.
- Combinez avec KCacheGrind via pyprof2calltree pour visualiser (optionnel).