On 2009-08-13, Dave Angel <[email protected]> wrote:
> I'm assuming you want to call it every time_interval seconds, on
> average, with a little jitter allowed on each call, but keeping correct
> long term. In other words, if one call is a little late, you want the
> next one to still happen as close to on-time as possible.
>
> The general outline is something like (untested):
>
> times_called = 0 #number of times function has been called
> start_time = now
> while True:
> elapsed = now - start_time
> int_elapsed = int(elapsed/time_interval)
> for times_called in range(times_called, int_elapsed):
> call_the_function()
> sleep(time_interval/10) #this might give us 10% jitter, which
> is usually fine
I don't understand the reasoning behind the above loop --
specifically the sleeping of smaller intervals than needed.
Why not something like this:
interval = 5.0 # interval in seconds
next = time.time()
while True:
now = time.time()
if now < next:
time.sleep(now-next)
print "call_the_function()"
next += interval
That will be accurate over the long term with minimal jitter.
--
http://mail.python.org/mailman/listinfo/python-list