Function to show time to execute another function

Cecil Westerhof Cecil at decebal.nl
Sun Jun 7 08:27:02 EDT 2015


On Sunday  7 Jun 2015 11:51 CEST, Steven D'Aprano wrote:

> On Sun, 7 Jun 2015 04:39 pm, Cecil Westerhof wrote:
>
>> Sometimes I just want to know how much time a function takes, but
>> at the same time I also want the result of the function. For this I
>> wrote the following function: def time_test(function, *args):
>> startTime = time.time() results = function(*args) endTime =
>> time.time() print('It took {0} seconds'.format(endTime -
>> startTime)) return results
>
> Oh, I forgot to mention... 
>
> This has the disadvantage that it only prints the time, you cannot
> collect it for further processing. (Well, not easily -- you could
> always shadow the print built-in, then parse the string... ugggh,
> that's horrible.)

I already found this an omission and posted a better version.


> Using the Timer with statement I linked to earlier, you can easily
> collect both the time and the calculated result:
>
> with Timer(verbose=False) as t:
> do_this()
> do_that()
> result = something_else()
>
> time_taken = t.interval
> print(result, "took", time_taken)

Personally I find:
    time_test(test_random, (100, 10 ** 5))
better as:
    with Timer() as t:
        test_random(100, 10 ** 5)
also because I will do it in a loop with different values for the
second (and maybe the first) parameter. But that is probably personal
preference.


> If you are interested, I have a more advanced version of that Timer
> which I use almost every day. It works in Python 2.4 through 3.3, I
> expect it to work in 3.4 and 3.5 as well, and is extensively tested
> in CPython and seems to work in Jython and IronPython as well.

I would certainly be interested. I work with 3.4, so I could test it
for you. And maybe even build a 3.5 version and test it there also.

-- 
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof



More information about the Python-list mailing list