【问题标题】:Stopping a tornado application停止龙卷风应用程序
【发布时间】:2014-05-21 08:44:57
【问题描述】:

我们来看看 Tornado 主页中的 hello world 应用:

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
  def get(self):
    self.write("Hello, world")

application = tornado.web.Application([
  (r"/", MainHandler),
])

if __name__ == "__main__":
  application.listen(8888)
  tornado.ioloop.IOLoop.instance().start()

有没有办法,在 IOloop 启动并且不停止它之后,基本上停止应用程序并启动另一个应用程序(在同一个端口或另一个端口上)?

我看到我可以在运行时添加新的应用程序(侦听不同的端口),但我不知道如何停止现有的应用程序。

【问题讨论】:

    标签: python tornado


    【解决方案1】:

    Application.listen() 方法实际上创建了一个HTTPServer 并调用它的listen() 方法。 HTTPServer 对象具有 stop() 方法,这可能是您需要的。但为了做到这一点,您必须在脚本中显式创建 HTTPServer 对象。

    server = HTTPServer(application)
    server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
    
    #somewhere in your code
    server.stop()
    

    【讨论】:

      【解决方案2】:

      这里是关于如何优雅而安全地关闭 tornado ioloop 的要点。

      https://gist.github.com/nicky-zs/6304878

      但是,您可以参考此实现来实现您的目标。

      【讨论】:

        【解决方案3】:

        要在几年后添加到 @Alex Shkop's answer,从 Tornado 4.3 开始,.listen() 返回对其 HTTPServer 的引用!

        https://www.tornadoweb.org/en/stable/web.html#tornado.web.Application.listen

        server = app.listen()
        ... # later
        server.stop()
        

        此外,如果您在 Jupyter 笔记本中工作并且由于某种原因需要 Tornado 服务器,您可以在重新创建之前try 关闭 HTTPServer 以避免 OSError: [Errno 98] Address already in use 重新运行单元格

        # some Jupyter cell
        #
        import tornado.web
        
        try:
            server.stop()  # NameError on first cell run
        except Exception as ex:
            print(f"server not started to stop: {repr(ex)}")
        else:  # did not raise NameError: server was running
            print(f"successfully stopped server: {server}")
        
        app = tornado.web.Application(...)
        server = app.listen(9006)  # arbitrary listening port
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多