【问题标题】:Tornado : support multiple Applications when using multi-process?(NOTE:multiple Applications)Tornado:使用多进程时支持多个应用程序?(注意:多个应用程序)
【发布时间】:2018-10-13 05:44:06
【问题描述】:

这是我的代码。

application1 = web.Application([
    (r"/", MainPageHandler),
])
http_server = httpserver.HTTPServer(application1)
http_server.listen(8080)

application2 = web.Application([
    (r"/appli2", MainPageHandler2),
])
http_server2 = httpserver.HTTPServer(application2)
http_server2.listen(8081)

ioloop.IOLoop.instance().start()

我想使用像https://www.tornadoweb.org/en/stable/httpserver.html 这样的多进程。 我应该如何修改我的代码?

【问题讨论】:

标签: python python-3.x flask tornado


【解决方案1】:

要在多进程模式下支持多个Applications,您必须使用带有add_sockets 方法的“高级”模式:

sockets1 = tornado.netutil.bind_sockets(8080)
sockets2 = tornado.netutil.bind_sockets(8081)
tornado.process.fork_processes(0)
server1 = HTTPServer(app1)
server2 = HTTPServer(app2)
server1.add_sockets(sockets1)
server2.add_sockets(sockets2)
IOLoop.current().start()

在调用fork_processes 之前绑定所有套接字(不做任何其他操作),然后创建服务器并将套接字添加到它们。

【讨论】:

  • 它不起作用。错误是“OSError: [Errno 98] Address already in use”。行是“sockets2 = tornado.netutil.bind_sockets(8080)”
  • 抱歉,第二次 bind_sockets 调用应该使用 8081。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多