[Twisted-Python] callLater(0) is A BIG LIE

Phillip J. Eby pje at telecommunity.com
Mon Nov 1 11:27:16 MST 2004


At 12:51 PM 11/1/04 -0500, Bob Ippolito wrote:
>Actually callLater(0, ....) was an edge case up until recently (I hope it 
>got fixed?) where it DID run in the current iteration.. a timer that fired 
>another timer with 0 delay would cause the timer processing to never 
>finish, so IO wouldn't happen anymore.
>
>Of course, everyone expected it to mean "call function f in the next 
>reactor iteration".. but it didn't :)

Right; I'm arguing that even in a "sane" scheduler it *doesn't* mean that, 
on a sufficiently fast machine with a sufficiently low-granularity 
clock.  For example, on Windows, time.time() has sufficiently low 
resolution that this can happen.

However, regardless of clock resolution, using a *non-zero* value for 
callLater, regardless of how small the value is, is sufficient to ensure 
that the item is run in the next iteration.  This should be true for any 
sane scheduler (i.e., one that can't enter a state of perpetual I/O 
starvation).





More information about the Twisted-Python mailing list