先来看一个 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 worldn")
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 (编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|