time.clock() or Windows bug?
nick at craig-wood.com
Sun Jun 8 21:30:46 CEST 2008
Theo v. Werkhoven <theo at van-werkhoven.nl.invalid> wrote:
> In this code I read out an instrument during a user determined period,
> and save the relative time of the sample (since the start of the test)
> and the readback value in a csv file.
> from datetime import *
> from time import *
> from visa import *
> from random import *
> for Reading in range(Readings):
> RelTimeOfSample = "%.1f" % clock()
> #Sample = "%.3f" % float(PwrMtr.read())
> Sample = "%.3f" % (uniform(8.9,9.3)) # Simulation of reading.
> print "Sample %s, at %s seconds from start; Output power is: %s dBm"
> % (Reading+1, RelTimeOfSample, Sample)
> writer.writerow([RelTimeOfSample, Sample])
> Sample 1, at 0.0 seconds from start; Output power is: 8.967 dBm
> Sample 17, at 105.7 seconds from start; Output power is: 9.147 dBm
> Sample 18, at 112.4 seconds from start; Output power is: 9.284 dBm
> Sample 19, at 119.0 seconds from start; Output power is: 9.013 dBm
> Sample 20, at 125.6 seconds from start; Output power is: 8.952 dBm
> Sample 21, at 91852.8 seconds from start; Output power is: 9.102 dBm
> Sample 22, at 91862.7 seconds from start; Output power is: 9.289 dBm
> Sample 23, at 145.4 seconds from start; Output power is: 9.245 dBm
> Sample 24, at 152.0 seconds from start; Output power is: 8.936 dBm
> But look at the timestamps of samples 21, 22 and 43.
> What is causing this?
> I've replaced the time.clock() with time.time(), and that seems to
> solve the problem, but I would like to know if it's something I
> misunderstand or if it's a problem with the platform (Windows Server
> 2003) or the time.clock() function.
time.clock() uses QueryPerformanceCounter under windows. There are
some known problems with that (eg with Dual core AMD processors).
And in particular
On a multiprocessor computer, it should not matter which processor
is called. However, you can get different results on different
processors due to bugs in the basic input/output system (BIOS) or
the hardware abstraction layer (HAL). To specify processor
affinity for a thread, use the SetThreadAffinityMask function.
I would have said time.time is what you want to use anyway though
because under unix time.clock() returns the elapsed CPU time which is
not what you want at all!
Nick Craig-Wood <nick at craig-wood.com> -- http://www.craig-wood.com/nick
More information about the Python-list