[PEAK] Events Question: How bad of an idea is this?

Chad Rosenberg chad at idrankwhat.net
Thu Nov 11 01:07:46 EST 2004

Makes sense.  Thanks for the info!

  - Chad

On Wed, 10 Nov 2004, Phillip J. Eby wrote:

> At 05:50 PM 11/10/04 -0800, Chad Rosenberg wrote:
> >On Wed, 10 Nov 2004, Phillip J. Eby wrote:
> >
> > > >With this change the above sample code runs to completion without any
> > > >errors, as does the code I am working with.  I'm not sure of what, if any,
> > > >long term repercussion this may produce (stack overflows, infinite loops,
> > > >etc).  Hence my question, how bad of an idea is this?
> > >
> > > Hm.  Well, that depends on what you're doing with the Twisted side of
> > > things.  Keep in mind that when you use a nested 'runUntil()', the reactor
> > > is going to fire shutdown events as soon as the *inner* runUntil()
> > > finishes.  This may not be what you want, since I believe that it will
> > > close all current socket connections.  Personally, I don't think that this
> > > would be a useful feature to add to PEAK.  :)
> >
> >Hmm, that didn't come up.  I just added a simple echo server to my sample
> >code and Twisted 1.2.0 maintained all open socket connections throughout
> >all the eventLoop calls.
> Interesting.  [quick break to do some research]  Ah, I see.  PEAK is using
> 'reactor.crash()', specifically to avoid this issue.  I forgot I already
> dealt with that.  :)
> It *does*, however, fire the 'startup' event each time you enter
> 'runUntil()'.  Whether this has any potential negative effects on other
> parts of Twisted, I couldn't say.
> Personally, though, I'm not inclined to change the way the PEAK event loop
> works without hearing from somebody more knowledgeable about the full
> spectrum of Twisted reactors.  The last time this was discussed, I seem to
> recall Bob Ippolito warning about the dangers of using nested reactor.run()
> on certain platforms.
> I should make it clearer, though, that runUntil() will not be changed in
> the way that you did, even if it's changed to better support a nested
> runloop in Twisted.  The intent is that an error *should* be raised if the
> reactor exits unexpectedly, because it's not supposed to exit unexpectedly.  :)
> Right now, nested runUntil() is *not* supported by PEAK for a Twisted
> reactor, so the current behavior is "correct" within its own narrow
> worldview, because it doesn't "expect" the loop to exit because an inner
> loop exited.  However, if we *do* later support such a nested run loop,
> then it will be changed in some way such that it *will* "expect" the exit,
> or such that it does not exit.
> For example, the Twisted version of 'runUntil()' could save
> 'reactor.running' before the start of the loop, and use a try/finally to
> 'startRunning()' the reactor again before returning, so that the outer loop
> will not be exited just because the inner loop was exited.  This would be
> the "correct" way, IMO, to support a nested run loop in Twisted -- assuming
> that Twisted actually supports it, which I currently doubt.

More information about the PEAK mailing list