之前并没有研究过flask在大量不同请求的情况下请求的处理机制,最近发现自己的一个监控系统的Recv-Q 堆积过多,然后看了一下是程序的处理能力的问题。
1、看见服务器Recv-Q较多,消费不及时
[root@iZbp1ftexcphcvhbglvmz8Z ~]# netstat -tnlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 12 0 0.0.0.0:1234 0.0.0.0:* LISTEN 17051/python
2、索性就测试了一下flask的阻塞情况
@api.route('/') #@auth.login_required def index(): import time time.sleep(15) return { print("hello world") }
同时执行了两个请求,上面这个先执行,后面在执行一个不同的请求,就会先等上面这个15秒的执行完了才会执行另一个不同的接口。
3、然后修改主程序
1)增加gevent
2)启动的时候开启多线程
nohup python manage.py runserver -d -r -h 0.0.0.0 -p 9527 --threaded &