tornado 多进程模式


https://www.douban.com/note/217901726/

官方文档的helloworld实例中的启动方法:


if __name__ == "__main__":

    application.listen(8888) # listen is a shortcut for bind and start ,这点看httpserver.py可以得知

    tornado.ioloop.IOLoop.instance().start()

并且在listen中,将tornado启动为单进程模型。

所以要启动为多进程模型的方法为:摒弃listen方法

 

    http_server = tornado.httpserver.HTTPServer(application)

    http_server.bind(options.port, options.host)

    http_server.start(num_processes=0) # tornado将按照cpu核数来fork进程

    tornado.ioloop.IOLoop.instance().start()

需要注意的一点是,要关掉debug模式,否则:
[E 110521 11:26:53 httpserver:229] Cannot run in multiple processes: IOLoop instance has already been initialized. You cannot call IOLoop.instance() before calling start()
原因是,autoreload.py已经在http_server.start()之前就初始化了IOLoop,这个在httpserver.py中的class HTTPServer()和def start()的doc string中已经解释了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM