先来看一个 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.youkuaiyun.com/wanghui_gytj/article/details/75448877
https://www.jianshu.com/p/41de38591e19