我已经编写了一个专门的JSON-RPC服务器,并且刚刚开始研究应用程序逻辑,发现不断地停止/重新启动服务器以进行某些更改有点烦人。
以前我有一个处理程序,它间隔运行以比较模块修改的时间戳与过去的检查,然后根据需要重新加载模块。不幸的是,我不相信它现在正常工作。
反应堆是否有办法以与Paster的Reloadable HTTPServer类似的方式停止并重新启动?
答案 0 :(得分:2)
使用Twisted发布的是twisted.python.rebuild模块,因此这可能是一个很好的起点。
另见这个问题:Checking for code changes in all imported python modules
答案 1 :(得分:1)
你可以写一些类似于贴纸重新加载器的东西,就像这样:
然而,这里的问题是,与开发网络服务器不同,大多数扭曲的应用程序有更多的状态,只是平坦的杀死/重启过程是一个坏主意,你可能会失去一些状态。
有一种方法可以干净利落地完成:
当你产生扭曲的应用程序时,使用subprocess.Popen()
或类似的东西来获取stdin / stdout管道。现在在您的子进程中,使用扭曲的反应器来监听stdin(有扭曲的代码,请参阅twisted.internet.stdio
,它允许您以通常的扭曲非阻塞方式使用与stdio传输通信的协议)。
最后,当您决定重新加载时,请将某些内容写入子进程的stdin,告诉它要关闭。现在你扭曲的代码可以响应并优雅地关闭。一旦它干净地退出,你的主进程就可以再次生成它。
(或者你可以使用信号来实现这一点,但这可能不是OS便携式)