time.sleep(1) sometimes runs for 200 seconds under windows
Claudio Grondi
claudio.grondi at freenet.de
Sun Feb 26 14:50:38 EST 2006
Tony Nelson wrote:
> In article <dtqpkl$kbo$1 at newsreader3.netcologne.de>,
> Claudio Grondi <claudio.grondi at freenet.de> wrote:
>
>
>>Claudio Grondi wrote:
>>
>>>Claudio Grondi wrote:
>>>
>>>
>>>>Paul Probert wrote:
>>>>
>>>>
>>>>>Peter Hansen wrote:
>>>>>
>>>>>
>>>>>>Are you saying that you believe the time.sleep(1) call is actually
>>>>>>blocking for 200 seconds?
>>>>
>>>>With such rare occurrence it is very hard to tell what is going on.
>>>>Usually I put such strange things on a list of curiosities I don't
>>>>want to know the reason of, because it is in my eyes not worth the
>>>>effort. Maybe it is even a common problem not yet detected by me,
>>>>because I have never run this kind of tests for such a long time.
>>>>Starting today, I can tell you statistically not earlier than in one
>>>>week, if I have the same problem on my machines (currently I am
>>>>running only one or two at the same time).
>>>
>>>
>>>Here the intermediate results on my Windows XP machine connected to the
>>>Internet via very fast digital phone line connection (network
>>>card/digital-converter box/phone-line):
>>>
>>>dt= 1.125 time= 2006_02_24_11h_36m_15s
>>>dt= 9.20200014114 time= 2006_02_24_12h_46m_49s
>>>dt= 1.18799996376 time= 2006_02_24_14h_43m_32s
>>>
>>>The code used:
>>>"""
>>>import time
>>>while True:
>>> oldtime=time.time()
>>> time.sleep(1.0)
>>> newtime=time.time()
>>> dt=newtime-oldtime
>>> if dt > 1.1:
>>> print 'dt=',dt,' time=',time.strftime('%Y_%m_%d_%Hh_%Mm_%Ss')
>>>"""
>>>running in a command line console parallel to usual daily business on
>>>the computer.
>>>
>>>The yesterday night run (5 hours) gave max. 1.125 sec., so I am
>>>surprized to see the 9 seconds already after only two hours today.
>>>
>>>Claudio
>>
>>The 9.2 seconds difference was also because of time synchronization
>>Windows XP does using time.windows.com server - it reported to be done
>>last time 2006-02-24 at 12:46 o'clock i.e. exactly at the same time
>>where the 9.2 delay occurred.
>
>
> ISTM that using time-of-day is the wrong thing for measuring elapsed
> time, but I don't find anything in the time module that would be better.
> /proc/uptime looks like it would work on linux, in a roundabout way:
>
> >>> up = open('/proc/uptime')
> >>> up.seek(0) ; up.read()
>
> will print uptime and idle time, but on linux only. At least it seems
> to be fast enough for the purpose at hand (about 18 microseconds on my
> old box, according to timeit).
>
> Is there a better timer available in python? I see that timeit module
> uses time.time() (or time.clock() on MSWindows), so I am not hopeful.
I mean, that using time.clock() solves the problem, because the output
of the following code:
"""
import time
while True:
old_Time = time.time()
oldClock = time.clock()
time.sleep(1.0)
new_Time = time.time()
newClock = time.clock()
dt=new_Time-old_Time
if( dt < 0.9 or dt > 1.1 ):
print 'new_Time-old_Time =', dt,'
time=',time.strftime('%Y_%m_%d_%Hh_%Mm_%Ss')
print 'newClock-oldClock =', newClock-oldClock
"""
was:
new_Time-old_Time = 177.921999931 time= 2006_02_26_20h_46m_01s
newClock-oldClock = 0.999994692063
new_Time-old_Time = -124.171999931 time= 2006_02_26_20h_44m_19s
newClock-oldClock = 1.00000502857
new_Time-old_Time = 53.3339998722 time= 2006_02_26_20h_45m_42s
newClock-oldClock = 1.00001313016
new_Time-old_Time = 0.634000062943 time= 2006_02_26_20h_45m_48s
newClock-oldClock = 1.00000195556
where I have manipulated the system clock manually to trigger the output.
Claudio
More information about the Python-list
mailing list