Phillip J. Eby
pje at telecommunity.com
Thu Jul 10 17:34:04 EDT 2003
At 11:58 PM 7/10/03 +0300, Yaroslav Samchuk wrote:
>I have an application, that uses peak.running.scheduler.UntwistedReactor.
>There are some readers and writers registered in this reactor, but there
>could be a situation, when no more readers, writer and laters left - so
>there is nothing to proceed. And this is the point, reactor must be
>terminated, I suppose...
How does it happen that you end up with no more readers or writers? I'm
curious, because in most circumstances, at least one reader will be some
kind of server listening, so why would it be terminated?
For other types of applications, the IMainLoop component manages idle
timeouts, so that if no useful work occurs for some time period, the
reactor will be shut down. IMainLoop can also shut down after a fixed
interval, and can also ignore idle timeouts until some interval has passed.
>So, my question is - what is the correct way to stop
>peak.running.scheduler.UntwistedReactor in the described situation? Is it
>a bug or a feature, that reactor continue to work either in case of no
>selectables (as well as laters) left?
To be honest, I had never considered such a possibility, as every
application scenario I envisioned for using the reactor either has an
explicit shutdown command occurring, is explicitly time-bound (periodic
task runner), or is a "run forever" loop. I am having trouble envisioning
a reactor-driven app whose tasks just "fade away". Maybe if you could
describe your app in more detail...?
>My solution was to override this reactor and to check readers, writers and
>laters on every iteration in reactor's run() method and if there are no
>any of them I just say self.stop(). Is it a correct way to terminate
>reactor in case of nothing to proceed or may be there is another way to do
>it, but I don't see it?
Well, that's one way to do it. I'd like to understand your intent better
though, before recommending a PEAK idiom for doing this.
More information about the PEAK