Message28841
THE ISSUE...
---
threading.py imports time.time as _time.
On win32 systems, time.time() periodically reads the
system time to figure out when to fire an Event.
System time can change while waiting for an Event!
eg: If the system time is changed while a
threading.Timer is pending, the execution time is
affected by the time change. eg: set a pending Timer
and then change the clock back an hour - this causes
your Timer to fire an hour later. This is clearly not
desirable.
A FIX...
---
A fix for this is to use time.clock() on win32 systems
instead. Once I found the problem, I currently just
fix it by overriding threading._time to be time.clock.
Right now I do this in every file that uses
threading.Timer.
COMMENTS...
---
The penalty for this is that there will be a rollover
problem eventaully... when the 64-bit performance
counter rolls over in 30+ years of continuous pc
operation. I'd much rather have this near impossible
event than the very likely system time change.
This is a general problem I find with the time module
and I often have to switch between time() and clock()
dependent on operating system, but I only work with
win32 and Linux. The issue is that if you want a high
resolution and extended rollover counter, it is a
different call on each system.
|
|
Date |
User |
Action |
Args |
2007-08-23 14:40:42 | admin | link | issue1508864 messages |
2007-08-23 14:40:42 | admin | create | |
|