[Twisted-Python] How to restart Twisted service in-process

Jean-Paul Calderone exarkun at twistedmatrix.com
Sat Feb 18 16:19:33 MST 2017


On Sat, Feb 18, 2017 at 2:25 PM, Glyph Lefkowitz <glyph at twistedmatrix.com>
wrote:

>
> On Feb 2, 2017, at 1:17 AM, Роман Мещеряков <romanmescheryakov at yandex.ru>
> wrote:
>
> *Hello everyone! I wrote Twisted-based TCP server which is capable of
> running in several relatively different modes. When mode switch is needed,
> I would like the server to restart itself by some means, for it to read new
> mode from configuration file and create corresponding implementation. Also
> I wanted the restart to occur without re-running twistd process, because it
> seems to me more appropriate for Linux daemon.*
>
>
> Hi Roman,
>
> Sorry it took a while to get to this one :).
>
> If your solution is working for you, then it's fine.  You've correctly
> understood the API associated with IServiceCollection and your
> implementation (at least at first glance, I don't have time to test it
> exhaustively :)) is correct.
>
> However, there's a more philosophical question as well: if you really want
> to *re-start* from scratch, what exactly are you shutting down and
> starting up again?  Wouldn't you want to be able to load new code?  Simply
> stopping and starting objects won't re-initialize the process from the
> beginning, only from some indeterminate middle state where parts of the
> program are already set up; this doesn't have the usual desired effect of a
> "restart" where potentially unknown or buggy state is cleared away.
>
> You may want to consider simply calling execv https://docs.python.org/
> 2.7/library/os.html#os.execv with [sys.executable] + sys.argv rather than
> trying to do this in terms of Twisted's APIs.
>

Or better yet.  Don't be afraid to just exit.  Your process is being
managed by a supervisor with a rich feature set - like easily controlled
re-restart behavior, right (If not, what do you do when your daemon simply
*crashes*)?

Jean-Paul
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20170218/e9ce5e7e/attachment-0002.html>


More information about the Twisted-Python mailing list