[Python-checkins] r46146 - sandbox/trunk/rjsh-pybench/pybench.py

M.-A. Lemburg mal at egenix.com
Tue May 23 21:34:34 CEST 2006


steve.holden wrote:
> Author: steve.holden
> Date: Tue May 23 21:21:00 2006
> New Revision: 46146
> 
> Modified:
>    sandbox/trunk/rjsh-pybench/pybench.py
> Log:
> Use the appropriate clock for the platform.
> Default the number of calibration runs to 0 (can set with -C)

Defaulting to 0 is a bad idea, since you basically turn
off calibration altogether.

Note that calibration is *very* important so
that only the operation itself is timed, not the setup,
loop and other logic not related to the test run.

> Modified: sandbox/trunk/rjsh-pybench/pybench.py
> ==============================================================================
> --- sandbox/trunk/rjsh-pybench/pybench.py	(original)
> +++ sandbox/trunk/rjsh-pybench/pybench.py	Tue May 23 21:21:00 2006
> @@ -56,6 +56,13 @@
>  except ImportError:
>      import pickle
>  
> +if sys.platform == "win32":
> +    # On Windows, the best timer is time.clock()
> +    default_timer = time.clock
> +else:
> +    # On most other platforms the best timer is time.time()
> +    default_timer = time.time
> +
>  ### Test baseclass
>  
>  class Test:
> @@ -108,7 +115,7 @@
>      # Misc. internal variables
>      last_timing = (0,0,0) # last timing (real,run,calibration)
>      warp = 1            # warp factor this test uses
> -    cruns = 20          # number of calibration runs
> +    cruns = 0           # number of calibration runs
>      overhead = None     # list of calibration timings
>  
>      def __init__(self,warp=1):
> @@ -133,16 +140,17 @@
>          """
>          test = self.test
>          calibrate = self.calibrate
> -        clock = time.clock
> +        clock = default_timer
>          cruns = self.cruns
>          # first calibrate
>          offset = 0.0
> -        for i in range(cruns):
> -            t = clock()
> -            calibrate()
> -            t = clock() - t
> -            offset = offset + t
> -        offset = offset / cruns
> +        if cruns:
> +            for i in range(cruns):
> +                t = clock()
> +                calibrate()
> +                t = clock() - t
> +                offset = offset + t
> +            offset = offset / cruns
>          # now the real thing
>          t = clock()
>          test()
> @@ -211,7 +219,6 @@
>      roundtime = 0               # Average round time
>      version = None              # Benchmark version number (see __init__)
>                                  # as float x.yy
> -    starttime = None            # Benchmark start time
>  
>      def __init__(self):
>  
> @@ -250,7 +257,6 @@
>          clock = time.clock
>          print 'Running %i round(s) of the suite: ' % self.rounds
>          print
> -        self.starttime = time.time()
>          roundtime = clock()
>          for i in range(self.rounds):
>              if verbose:
> @@ -323,7 +329,7 @@
>              print '-'*77
>              if compatible and compare_to.roundtime > 0 and \
>                 compare_to.version == self.version:
> -                print '%30s: %8.2f ms %8.2f ms                %+7.2f%%' % \
> +                print '%30s: %8.2f ms %8.2f ms              %+7.2f%%' % \
>                        ('Notional minimum round time', totalmintime * 1000.0,
>                        other_totalmintime * 1000.0,
>                         ((totalmintime*self.warp)/
> @@ -365,7 +371,8 @@
>                 SwitchOption('--no-gc','disable garbage collection', 0),
>                 SwitchOption('--no-syscheck',
>                      '"disable" sys check interval (set to sys.maxint)', 0),
> -               ArgumentOption('-t', 'tests containing substring', '')
> +               ArgumentOption('-t', 'tests containing substring', ''),
> +               ArgumentOption('-C', 'number of calibration runs (default 0)', '')
>                 ]
>  
>      about = """\
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, May 23 2006)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________

::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::


More information about the Python-checkins mailing list