Hi, Perhaps I am the only one bothered by the timeit module, but it seems poorly designed to me.
First of all, it should use a geometric series with a timeout value to detect how many iterations it should perform. Currently, the user is required to manually specify the number of iterations (the default is 1 million). If the user optimizes his or her code, then the number of iterations must be changed. If the user moves to a slower or faster computer, then the number of iterations must be changed again. This is annoying. Secondly, there should be a way to time a callable directly. That is, without finding the string name of the callable and using a string "import X" statement. These contortions violate rules #1 and #3 of the Zen of Python. Yes, there is function call overhead in timing a callable as opposed to a fragment of code. However, when I'm benchmarking code I am often timing functions, so it seems logical to make this easy to do. I have three (mutually exclusive) ideas for improving the current situation: * Add a time_callable() or time_func() function to the timeit module. These would take the callable, args, kwargs, and maximum time* to spend timing the function as arguments. * Add a FuncTimer class (function/callable timer) to the existing timeit module. The constructor takes a callable, args, kwargs as arguments. The class has instance methods timeit(max_time=4.0) and repeat(repeat=3, max_time=4.0). * Create a new timeit module (e.g. timeit2) which uses geometric series to implement both code fragment timing (which timeit does) and callable timing. I have a simple implementation of geometric series timing routines for callables and code fragments. This is recipe 440657. http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440657 This recipe leaves the GC enabled. Clearly, this is simple to implement. If python-dev likes the idea of improving Python's timeit functionality, I volunteer to implement whichever interface is decided upon. Opinions? Thanks, Connelly Barnes * The maximum time will be exceeded only if a single call to the callable takes more than max_time seconds. __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com