Flask+Gunicorn(协程)高并发的解决方法探究

1.使用Flask的做服务器框架,可以以python code.py的方式运行,但这种方式不能用于生产环境,不稳定,比如说: 有一定概率遇到连接超时无返回的情况

1,通过设置app.run()的参数,来达到多进程的效果。看一下app.run的具体参数:

Flask+Gunicorn(协程)高并发的解决方法探究

注意: threaded与processes不能同时打开,如果同时设置的话,将会出现以下的错误:

Flask+Gunicorn(协程)高并发的解决方法探究

2.使用gevent做协程,从而解决高并发的问题:

Flask+Gunicorn(协程)高并发的解决方法探究

3.通过Gunicorn(with gevent)的形式对app进行包装,从而来启动服务【推荐】

安装遵循了WSGI协议的gunicorn服务器--俗称:绿色独角兽

Flask+Gunicorn(协程)高并发的解决方法探究

查看命令行选项: 安装gunicorn成功后,通过命令行的方式可以查看gunicorn的使用信息。

Flask+Gunicorn(协程)高并发的解决方法探究

指定进程和端口号: -w: 表示进程(worker) --bind:表示绑定ip地址和端口号(bind) —threads 多线程 -k 异步方案

Flask+Gunicorn(协程)高并发的解决方法探究

运行方案2: 将运行的信息加载到配置文件中

使用gunicorn + gevent 开启高并发

Flask+Gunicorn(协程)高并发的解决方法探究

使用 meinheld + gunicorn + flask 开启高并发神器

Flask+Gunicorn(协程)高并发的解决方法探究

拓展

概念:协程就是协同工作的程序,不是进程也不是线程 理解成--不带返回值的函数调用。

Flask+Gunicorn(协程)高并发的解决方法探究

历史遗留问题—GIL锁

Flask+Gunicorn(协程)高并发的解决方法探究

解决方案:python的高并发更加推荐多进程+协程

io多路复用

Flask+Gunicorn(协程)高并发的解决方法探究

python异步实现

多进程 + 协程 + callback(io多路复用做事件驱动)

协程 第三方封装库:

  • gevent = greenlet + python.monkey(底层使用 libevent 时间复杂度: O(N * logN))
  • meinheld = greenlet + picoev (时间复杂度: O(N) )
  • eventlet

picoev和libevent

Flask+Gunicorn(协程)高并发的解决方法探究

理解----协程&线程&进程

Flask+Gunicorn(协程)高并发的解决方法探究

2.思考:协程之前切换的场景?

程序发送阻塞的时候切换

  • 读磁盘
  • 读写文件
  • 网络io操作
  • 收发http请求

相关推荐