measuring a function time

MRAB python at mrabarnett.plus.com
Fri Jul 30 10:50:56 EDT 2010


Albert Hopkins wrote:
> On Fri, 2010-07-30 at 14:28 +0200, Hrvoje Niksic wrote:
>> Steven D'Aprano <steve at REMOVE-THIS-cybersource.com.au> writes:
>>
>>> On Thu, 29 Jul 2010 14:42:58 +0200, Matteo Landi wrote:
>>>
>>>> This should be enough
>>>>
>>>>>>> import time
>>>>>>> tic = time.time()
>>>>>>> function()
>>>>>>> toc = time.time()
>>>>>>> print toc - tic
>>> You're typing that in the interactive interpreter, which means the
>>> timer is counting the seconds while you're typing subsequent
>>> commands. At the very least, you need to put that code into a
>>> function.
>> Or, trivially improved as follows:
>>
>>>>> t0 = time.time(); function(); t1 = time.time()
>>>>> print t1 - t0
> 
> I'll just throw this out.  I sometimes use a decorator to keep track of
> a functions execution times:
> 
> 
>         def timed_function(f):
>             """Function decorator that records the execution time of a
>         function"""
>             import time
>             def funct(*args, **kwargs):
>                 __starttime = time.time()
>                 result = f(*args, **kwargs)
>                 __endtime = time.time()
>                 funct.runtime = __endtime - __starttime
>         
>                 return result
>             return funct
> 
> Then
> 
>         >>> from goodies import timed_function
>         >>> from time import sleep
>         >>> @timed_function
>         ... def test(n):
>         ...     sleep(n)
>         ... 
>         >>> test(4)
>         >>> test.runtime
>         4.003864049911499
> 
> Works for simple stuff anyway.
> 
That won't work very well for functions which don't run for long. You
could fix that by adding a counter for the number of times it's run and
the total time.



More information about the Python-list mailing list