Python3 Tornado 如何开启多进程模式

先来看一个 Tornado 示例:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

from tornado.ioloop import IOLoop as Run
from tornado.web import RequestHandler, Application

class MainHandler(RequestHandler):
     def get(self):
         self.write("hello world\n")

app = Application([(r"/",MainHandler)], debug=False)

if __name__ == '__main__':
	app.listen(8000)
    Run.instance().start()

这是一个极简的 Tornado 应用,在命令行启动后就可以通过 API 进行访问了。但是,这是一个单进程的应用,同一时刻只能有一个应用访问,其他应用如果访问就需要进行排队,等到第一个任务结束后才可以进行后续的访问

如果再开发环境中那也无所谓,但是如果在生产环境中就会有影响。那么 Tornado 有没有可以开启多进程的方法呢?

有!我们可以通过部署 Tornado 的时候进行多个端口启动,然后使用 Supervisor 管理 Tornado 的进程,再通过 Nginx 负载均衡到各个 Tornado 应用上

当然,在单个 Tornado 应用中开启多进程也是可以的

需要引入 tornado.httpserver 下的 HTTPServer

from tornado.httpserver import HTTPServer

if __name__ == '__main__':

    # 单进程启动
    # app.listen(8000)
    # Run.instance().start()

    # 多进程启动
    server = HTTPServer(app)
    server.bind(8000)
    server.start(num_processes=None)
    Run.instance().start()

num_processes=None 代表开启对应机器的 CPU 核数的进程,num_processes=2 就代表开启两个进程

在使用多进程启动的时候,需要关掉 debug 模式

settings = {'debug' : False}

参考文章:
https://www.jb51.net/article/53213.htm
https://blog.csdn.net/wanghui_gytj/article/details/75448877
https://www.jianshu.com/p/41de38591e19

你可能感兴趣的:(#,Python3,基础知识,Python,Tornado,多进程)