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