Flask+Gunicorn(协程)高并发的解决方法探究
1.使用Flask的做服务器框架,可以以python code.py的方式运行,但这种方式不能用于生产环境,不稳定,比如说: 有一定概率遇到连接超时无返回的情况
1,通过设置app.run()的参数,来达到多进程的效果。看一下app.run的具体参数:
注意: threaded与processes不能同时打开,如果同时设置的话,将会出现以下的错误:
2.使用gevent做协程,从而解决高并发的问题:
3.通过Gunicorn(with gevent)的形式对app进行包装,从而来启动服务【推荐】
安装遵循了WSGI协议的gunicorn服务器--俗称:绿色独角兽
查看命令行选项: 安装gunicorn成功后,通过命令行的方式可以查看gunicorn的使用信息。
指定进程和端口号: -w: 表示进程(worker) --bind:表示绑定ip地址和端口号(bind) —threads 多线程 -k 异步方案
运行方案2: 将运行的信息加载到配置文件中
使用gunicorn + gevent 开启高并发
使用 meinheld + gunicorn + flask 开启高并发神器
拓展
概念:协程就是协同工作的程序,不是进程也不是线程 理解成--不带返回值的函数调用。
历史遗留问题—GIL锁
解决方案:python的高并发更加推荐多进程+协程
io多路复用
python异步实现
多进程 + 协程 + callback(io多路复用做事件驱动)
协程 第三方封装库:
- gevent = greenlet + python.monkey(底层使用 libevent 时间复杂度: O(N * logN))
- meinheld = greenlet + picoev (时间复杂度: O(N) )
- eventlet
picoev和libevent
理解----协程&线程&进程
2.思考:协程之前切换的场景?
程序发送阻塞的时候切换
- 读磁盘
- 读写文件
- 网络io操作
- 收发http请求
相关推荐
username=user ; should be same as http_username if set. password=123 ; should be same as http_passwo