背景
高并发现在似乎很热,但真正接触到高并发生产环境的人不是太多,所以好多人对高并发很是向往...,其实高并发并没有什么稀奇的,主要还是对电脑进程、线程、io处理的一个综合控制以此来到达更有效率的处理客户端请求。
flask 原生支持多进程和多线程
flask 在启动时指定参数来支持多进程和多线程
直简上代码
from flask import Flask
app = Flask(__name__)
# 参数processes 是让flask支持多进程,其实flask默认不指定参数的情况processes=1,也就是单进程运行
app.run(processes=True)
# 参数threaded 是让flask程序支持多线程,默认flask是不支持多线程即:threaded=False
app.run(threaded=True)
flask程序启动的时候多进程与多线程不能同时开启
采用tornado进行部署
tornado 是用python语言写的一个高性能web框架,不但能直接用来开发web应用,也可以作为web server服务,因为tornado 是实现了wsgi接口,支持http协议
代码如下:
from flask import Flask
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado import ioloop
import logging
LOG = logging.getLogger(__name__)
max_body_size = 800000000
app = Flask('tonado_demo')
app.route('/hello')
def hello():
return 'hello world'
http_server = HTTPServer(WSGIContainer(app), max_body_size=max_body_size)
http_server.listen(port, address=bind)
LOG.info('Listening on {}:{}'.format(bind, port))
ioloop.IOLoop.instance().start()
利用gunicorn部署flask应用程序
gunicorn 也是也给python写的高性能web中间件,我的博客何三笔记就是采用nginx+gunicorn进行的部署
代码如下:
/data/h3blog-flask/venv/bin/gunicorn --access-logfile - --workers 2 --bind unix:/data/h3blog-flask/h3blog.sock wsgi:app
使用redis进行读取加速
使用redis的直接好处就是可以瞬间加速应用程序,这其实就是优化了系统IO资源
最后
当然让flask支持高并发的方式还有很多,这里只是列举了几个常见的和我本博客使用的方式,开发不要搞的太复杂,越简单越好....