[Twisted-Python] No-op TimerService on Windows?
Eric Faurot
eric.faurot at gmail.com
Thu May 4 09:39:22 MDT 2006
On 5/4/06, glyph at divmod.com <glyph at divmod.com> wrote:
> On Thu, 4 May 2006 11:05:21 +0200, Eric Faurot <eric.faurot at gmail.com> wrote:
>
> >In the process of exploring my options for deploying twisted
> >applications on Windows, I noticed that when running the application,
> >_twistw (line 43) also starts a TimerService around a no-op:
> >
> >app.startApplication(internet.TimerService(0.1, lambda:None), 0)
> >
> >I suppose there is very good reason to do so, but I do not see it.
> >Can somebody enlighten me?
>
> There should be a comment or something to this effect, but:
>
> On Windows, the "signal" handling that Control-c triggers doesn't actually interrupt select(). That timer is there to keep the timeout low so that the server responds in a timely fashion when the user hits Control-c on the console, even if nothing else is happening.
Ok, but as far as I can see, it is redundant with way select is
wrapped on win32 (in selectreactor). BTW, I am not windows-savvy, but
are the arguments to select (r,w,w) really correct? not (r,w,e)?
def win32select(r, w, e, timeout=None):
"""Win32 select wrapper."""
if not (r or w):
# windows select() exits immediately when no sockets
if timeout is None:
timeout = 0.01
else:
timeout = min(timeout, 0.001)
sleep(timeout)
return [], [], []
# windows doesn't process 'signals' inside select(), so we set a max
# time or ctrl-c will never be recognized
if timeout is None or timeout > 0.5:
timeout = 0.5
r, w, e = select.select(r, w, w, timeout)
return r, w + e, []
Eric.
More information about the Twisted-Python
mailing list