tornado的多进程模式如何实现共享同一个ioloop?

启动方式大概如下

app = tornado.web.Application(router.url_map, **settings)
server = tornado.httpserver.HTTPServer(app)
server.bind(options.port)
server.start(10)
tornado.ioloop.IOLoop.instance().start()

这里启动了10个子进程去并行,每个进程的资源是隔离的, 实际测试中发现不同进程打印出来的ioloop实例地址一样的

在代码中也没看见有进程中的共享内存等操作, 所以想问是怎么实现共享同一个ioloop的?

阅读 6.6k
3 个回答
sockets = tornado.netutil.bind_sockets(8888)
tornado.process.fork_processes(0)
server = HTTPServer(app)
server.add_sockets(sockets)
IOLoop.current().start()

实际测试中发现不同进程打印出来的ioloop实例地址一样的

应该是你测试有问题。把代码粘出来。或者,你先自己确认一下,是不是真的“不同进程”。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题