27

Along my source code I try to capture and measure the time release of a segment in Python. How can I measure that segment pass time in a convenient way with good precision?

2

1 Answer 1

43

Use a profiler.

Python's cProfile is included in the standard libary.

For an even more convenient way, use the package profilestats. Then you can use a decorator to just decorate the functions you want to profile:

from profilestats import profile @profile def my_function(args, etc): pass 

This will cause a summary like this to be printed on STDOUT:

 6 function calls in 0.026 seconds Ordered by: cumulative time ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.026 0.026 some_code.py:3(some_func) 2 0.019 0.010 0.026 0.013 some_code.py:9(expensive_func) 2 0.007 0.003 0.007 0.003 {range} 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 

The much more useful info however is in the cachegrind.out.profilestats file generated. You can open this file with a tools that can visualize cachegrind statistics, for example RunSnakeRun and get nice, easy (or easier) to read visualizations of your call stack like this:

RunSnakeRun

Update: Both pull requests for profilestats and pyprof2calltree have been merged, so they now support Python 3.x as well.

Sign up to request clarification or add additional context in comments.

3 Comments

What version of Python does profilestats support? There is no indication on the page or even in any of the code that I see...
You're right, it doesn't indicate supported Python versions on it's PyPi page. It's just a tiny wrapper around cProfile (profilestats.py is basically all the code), but from a quick glance it's use of file instead of open means it wont work on Python 3.x as-is. It also depends on pyprof2calltree, which is 2.x only. However, both should be easily converted by the 2to3 script, I'm guessing that just no-one has gotten around to making that pull-request yet.
Python 3.x pull-requests done for pyprof2calltree and profilestats.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.