def bar(i):
return i*i
def foo():
for i in range(0,1000000):
bar(i)
Let's try to use these two silly functions to do a profiling exercise.
First of all, we need to import cProfile. And then call: cProfile.run('foo()')
Output (from my laptop):
1000004 function calls in 3.564 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 1.926 1.926 3.564 3.564 <pyshell#11>:1(foo)
1000000 1.638 0.000 1.638 0.000 <pyshell#9>:1(bar)
1 0.000 0.000 3.564 3.564 <string>:1(<module>)
1 0.000 0.000 3.564 3.564 {built-in method exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
At the first glance, it may look criptic, but: the total time is the time spent in a function excluding the time spent in callees. The cummulative time is the time spent in a function including the time spent in callees. Therefore, these two times are equal for bar function. ncalls and percall are self-explanatory.
But we can go further. I highly recommend trying out a GUI application that can read the cProfile output, such as RunSnakeRun from http://www.vrplumber.com/programming/runsnakerun For this simple case it'd be useless, but for much more complex call tree, it is of great help.
In order to use it, we need to run cProfile giving it the dump file name as the second argument:
cProfile.run('foo()', 'dump.txt')
I have had the rare opportunity of watching and being part of the change that the software industry has gone through throughout over 20 last years. This blog is a collection of my reflections on pursuing agility path. It includes observations and advice regarding development teams and notes on useful engineering practices. Enjoy! Piotr Górak.
See also
-
We may often come across a piece of code that was written without Unit Tests at all. In addition, the piece of code may be dealing with IO l...
-
Google Mock provides several ways to maintain state inside mock objects. One way of implementing state maintenance is with SaveArg . Consid...
-
Requirements have a long history in software industry. We all have heard or read terms like: requirements definition, requirements managemen...
-
Google Mock provides a way to return newly created objects from a mock method. Suppose we have a Generator class that is supposed to ...
-
Can we verify that a mock object is properly destroyed? Of course! There is a couple of subtle differences between mocking regular func...