Anomaly in time.clock()

Godzilla godzillaismad at gmail.com
Thu Mar 20 12:47:00 CET 2008


Thanks Ross and John for your help. I apologise for the code I posted
earlier not being the full picture of what I was trying to achieve. I
had instantiated multiple instances of elapseTime class and each of
them gets called approximately the same time. Below is the updated
code:


import time
import thread
import Queue

printq = Queue.Queue(0)

class elapseTime:
    def __init__(self, name=''):
      self.name = name
      self.timeStamp = None
      self.checkTimeFlag = False
      thread.start_new_thread(self.elapsedTime, ())

    def setTime(self, state):
      if state == 1:
        self.checkTimeFlag = True
        self.timeStamp = time.clock()
      else:
        self.checkTimeFlag = False

    def elapsedTime(self):
      prevTime = time.clock()
      while True:
        curTime = time.clock()
        timeDiff = (curTime - prevTime)
        if timeDiff < 0.0:
          printq.put_nowait('time.clock() has gone backward!!! Time
Diff '+str(timeDiff))
        if self.checkTimeFlag:
          if (curTime - self.timeStamp) > 1.0:
            printq.put_nowait(self.name+", actual Elapsed
Time"+str(round(curTime-self.timeStamp, 3)))
            self.checkTimeFlag = False
        prevTime = curTime
        time.sleep(0.05)

def printmgr():
    while True:
        print printq.get(True)

# Print thread
thread.start_new_thread(printmgr, ())

objList = []
for i in range(10):
  objList.append(elapseTime("obj"+str(i)))

while True:
  for i in range(len(objList)):
      objList[i].setTime(1)
  time.sleep(10)
  print


When I run the above code long enough in the PC I see the
'time.clock() has gone backward!!!' statement being printed once in a
while. I have been reading a thread about invoking time.clock() at
close proximity caused the 'time warp' problem.

John, the PC experiencing this problem is a single core Intel Celeron
1GHz, XP SP2. The PC at home is a AMD Dual Core XP SP2.



More information about the Python-list mailing list