python如何实现高并发问题_Python利用gunicorn+gevent实现高并发运行

Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server。

和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点。

协程又称为微线程,纤程。英文名Coroutine:协程是一种用户态的轻量级线程

协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复之前保存的寄存器上下文和栈。因此协程能够保留上次一调用时的状态,能够进入上一次离开时所处的逻辑流的位置

协程的好处:无需线程上下文切换的开销

无需原子操作(不会被线程调度机制打断的操作)锁定以及同步的开销

方便切换控制流,简化编程模型

高并发+高扩展性+低成文:一个CPU支持上完的协程都不是问题,所以很适合高并发处理

协程的缺点无法利用多核资源:协程的本质是单线程,需要和进程配合才能运行在多CPU上

进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序

协程的条件必须在只有一个单线程里实现并发

修改共享数据不需加锁

用户程序里自己保存多个控制流的上下文栈

一个协程遇到IO操作自动切换到其它协程

我采用gunicorn+gevent的方式实现flask的高并发运行主要原因在于配置简单,参考资料也发现gunicorn对协程的配合度更高,且性能不会比uWSGI差,对我来说也是个新的探索与尝试。

gevent配置:引入猴子补丁from gevent import monkey

monkey.patch_all()

#使用WSGI

if __name__ == '__main__':

from gevent import pywsgi

server = pywsgi.WSGIServer(('0.0.0.0', 5050), app)

server.serve_forever()

gunicorn配置:通常进程数量选择核数的两倍gunicorn -w 8 -k 'gevent' -D --bind 0.0.0.0:8080 app:app

# -D代表后台运行

#-w:指定fork的worker进程数 -b:指定绑定的端口

#-k WORKERCLASS,–worker-class=WORKERCLASS

#工作进程类型,包括sync(默认),eventlet,gevent,tornado,gthread,gaiohttp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值