如何让flask架构程序支持高并发

背景

高并发现在似乎很热,但真正接触到高并发生产环境的人不是太多,所以好多人对高并发很是向往...,其实高并发并没有什么稀奇的,主要还是对电脑进程、线程、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支持高并发的方式还有很多,这里只是列举了几个常见的和我本博客使用的方式,开发不要搞的太复杂,越简单越好....