Python 使Twisted应用程序的某些部分可重新加载的策略或支持?

Python 使Twisted应用程序的某些部分可重新加载的策略或支持?,python,twisted,Python,Twisted,我已经编写了一个专门的JSON-RPC服务器,并且刚刚开始深入应用程序逻辑,发现不断地停止/重新启动服务器以进行某些更改有点烦人 以前,我有一个处理程序,它每隔一段时间运行,将模块修改的时间戳与过去的检查进行比较,然后根据需要重新加载模块。不幸的是,我不相信它现在能正常工作 有没有一种方法可以让反应堆以类似于Paster的可重新加载的HTTPServer的方式停止并重新启动?您可以编写类似于Paster的重新加载程序的内容,如下所示: 启动主函数,在导入/使用任何扭曲代码之前,派生/生成子流程

我已经编写了一个专门的JSON-RPC服务器,并且刚刚开始深入应用程序逻辑,发现不断地停止/重新启动服务器以进行某些更改有点烦人

以前,我有一个处理程序,它每隔一段时间运行,将模块修改的时间戳与过去的检查进行比较,然后根据需要重新加载模块。不幸的是,我不相信它现在能正常工作


有没有一种方法可以让反应堆以类似于Paster的可重新加载的HTTPServer的方式停止并重新启动?

您可以编写类似于Paster的重新加载程序的内容,如下所示:

  • 启动主函数,在导入/使用任何扭曲代码之前,派生/生成子流程
  • 在子流程中,运行twisted应用程序
  • 在主进程中,运行检查更改文件的代码。如果代码已更改,请重新加载子流程
  • 然而,这里的问题是,与开发Web服务器不同,大多数twisted应用程序都有更多的状态,完全停止/重新启动进程是个坏主意,您可能会失去一些状态

    有一种方法可以做到干净:

    生成twisted应用程序时,请使用
    subprocess.Popen()
    或类似工具来获取stdin/stdout管道。现在在您的子流程中,使用twisted reactor监听stdin(twisted中有相关代码,请参阅
    twisted.internet.stdio
    ,它允许您使用协议以通常的twisted非阻塞方式与stdio传输进行通信)

    最后,当您决定是时候重新加载时,向子流程的stdin写入一些内容,告诉它关闭。现在,您的扭曲代码可以正常响应并关闭。一旦它完全退出,您的主进程就可以再次生成它


    (或者,您可以使用信号来实现这一点,但这可能不是操作系统可移植的)

    Twisted附带的是模块,因此这可能是一个很好的起点


    还有这个问题:

    我想你的计划可能是我能走的最简单的道路。我目前正在尝试克拉斯特和克莱梅沙的答案。。。将更新我的问题,并根据我的情况选择赢家。你知道,在谷歌搜索问题时遇到了麻烦,回到你3年前提出的问题。它不是完美的,但扭曲了。python.rebuild似乎适合我的情况。