关于python web实现高并发

来源:1-1 Tornado从入门到进阶 打造支持高并发的技术论坛-导语

杰神

2018-10-25

老师,关于python web实现高并发,我有些疑问想咨询一下。我一开始学的时候 Flask中,在Flask中可以使用多线程与线程隔离技术。同时我在网上看到,说在flask部署的时候,使用uwsgi+nginx就可以实现高并发。然后也有提到Tornado的异步非阻塞和协程。我想知道这三方面的优劣,以及老师关于这三种方案的一个评价。谢谢啦

写回答

2回答

bobby

2018-10-26

安生大概描述了区别,我这里补充一下,apache和nginx两者从原理上有根本区别, apache和nginx就类别做django/flask 和tornado的对比, apache和django/flask一样都是阻塞框架,所以只能采用多进程加多线程的处理方式, 这里一个用户请求对应一个线程, 一个操作系统能同时维持的线程数是有上限的,比如100个,那么也就意味着同时能处理的socket连接是100,多于100个就需要等待。 nginx和tornado两者底层采用的是事件循环,就意味着能接受socket连接理论上没有上限并且占用内存小,但是因为是单线程的模式,如果任何一个请求阻塞住了,其他所有的请求都会被阻塞住,这也是nginx为什么只愿意做端口转发而不愿意将一些服务像apache一样继承到自身中一样,因为这些都是阻塞io。

1
0

安生ing

2018-10-25

flask/django等都是单线程的,如果你使用多进程或者多线程都是很消耗系统资源的,uwsgi部署的时候,其实也是多启动了几个Django的进程而已。


但是tornado使用了epoll模型,事件循环驱动,性能自然会高一些,个人愚见

0
0

Tornado从入门到进阶 打造支持高并发的技术论坛

异步IO并发编程/Form,ORM/aiomysql、peewee-async/epoll

593 学习 · 350 问题

查看课程