77Library usage: see the Timer class.
88
99Command line usage:
10- python timeit.py [-n N] [-r N] [-s S] [-p] [-h] [--] [statement]
10+ python timeit.py [-n N] [-r N] [-s S] [-p] [-h] [-t T] [- -] [statement]
1111
1212Options:
1313 -n/--number N: how many times to execute 'statement' (default: see below)
1717 -p/--process: use time.process_time() (default is time.perf_counter())
1818 -v/--verbose: print raw timing results; repeat for more digits precision
1919 -u/--unit: set the output time unit (nsec, usec, msec, or sec)
20+ -t/--target-time T: if --number is 0 the code will run until it
21+ takes *at least* this many seconds
22+ (default: 0.2)
2023 -h/--help: print this usage message and exit
2124 --: separate options from statement, use when statement starts with -
2225 statement: statement to be timed (default 'pass')
2831
2932If -n is not given, a suitable number of loops is calculated by trying
3033increasing numbers from the sequence 1, 2, 5, 10, 20, 50, ... until the
31- total time is at least 0.2 seconds.
34+ total time is at least --target-time seconds.
3235
3336Note: there is a certain baseline overhead associated with executing a
3437pass statement. It differs between versions. The code here doesn't try
5760default_number = 1000000
5861default_repeat = 5
5962default_timer = time .perf_counter
63+ default_target_time = 0.2
6064
6165_globals = globals
6266
@@ -212,12 +216,13 @@ def repeat(self, repeat=default_repeat, number=default_number):
212216 r .append (t )
213217 return r
214218
215- def autorange (self , callback = None ):
216- """Return the number of loops and time taken so that total time >= 0.2.
219+ def autorange (self , callback = None , target_time = default_target_time ):
220+ """Return the number of loops and time taken so that
221+ total time >= target_time (default is 0.2 seconds).
217222
218223 Calls the timeit method with increasing numbers from the sequence
219- 1, 2, 5, 10, 20, 50, ... until the time taken is at least 0.2
220- second. Returns (number, time_taken).
224+ 1, 2, 5, 10, 20, 50, ... until the target time is reached.
225+ Returns (number, time_taken).
221226
222227 If *callback* is given and is not None, it will be called after
223228 each trial with two arguments: ``callback(number, time_taken)``.
@@ -229,7 +234,7 @@ def autorange(self, callback=None):
229234 time_taken = self .timeit (number )
230235 if callback :
231236 callback (number , time_taken )
232- if time_taken >= 0.2 :
237+ if time_taken >= target_time :
233238 return (number , time_taken )
234239 i *= 10
235240
@@ -270,9 +275,10 @@ def main(args=None, *, _wrap_timer=None):
270275 colorize = _colorize .can_colorize ()
271276
272277 try :
273- opts , args = getopt .getopt (args , "n:u:s:r:pvh " ,
278+ opts , args = getopt .getopt (args , "n:u:s:r:pt:vh " ,
274279 ["number=" , "setup=" , "repeat=" ,
275- "process" , "verbose" , "unit=" , "help" ])
280+ "process" , "target-time=" ,
281+ "verbose" , "unit=" , "help" ])
276282 except getopt .error as err :
277283 print (err )
278284 print ("use -h/--help for command line help" )
@@ -281,6 +287,7 @@ def main(args=None, *, _wrap_timer=None):
281287 timer = default_timer
282288 stmt = "\n " .join (args ) or "pass"
283289 number = 0 # auto-determine
290+ target_time = default_target_time
284291 setup = []
285292 repeat = default_repeat
286293 verbose = 0
@@ -305,6 +312,8 @@ def main(args=None, *, _wrap_timer=None):
305312 repeat = 1
306313 if o in ("-p" , "--process" ):
307314 timer = time .process_time
315+ if o in ("-t" , "--target-time" ):
316+ target_time = float (a )
308317 if o in ("-v" , "--verbose" ):
309318 if verbose :
310319 precision += 1
@@ -324,7 +333,7 @@ def main(args=None, *, _wrap_timer=None):
324333
325334 t = Timer (stmt , setup , timer )
326335 if number == 0 :
327- # determine number so that 0.2 <= total time < 2.0
336+ # determine number so that total time >= target_time
328337 callback = None
329338 if verbose :
330339 def callback (number , time_taken ):
@@ -333,7 +342,7 @@ def callback(number, time_taken):
333342 print (msg .format (num = number , s = 's' if plural else '' ,
334343 secs = time_taken , prec = precision ))
335344 try :
336- number , _ = t .autorange (callback )
345+ number , _ = t .autorange (callback , target_time )
337346 except :
338347 t .print_exc (colorize = colorize )
339348 return 1
0 commit comments