前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >uWSGI和WSGI之间的关系(下)

uWSGI和WSGI之间的关系(下)

原创
作者头像
陈不成i
修改2021-06-18 18:08:27
1.3K0
修改2021-06-18 18:08:27
举报
文章被收录于专栏:ops技术分享ops技术分享

三.搭配nginx

因为nginx具备优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。这时候nginx和uWSGI之间的沟通就要用到uwsgi协议。

file
file
file
file
file
file
file
file

四.总结

django 的并发能力真的是令人担忧,这里就使用 nginx + uwsgi 提供高并发

nginx 的并发能力超高,单台并发能力过万(这个也不是绝对),在纯静态的 web 服务中更是突出其优越的地方,由于其底层使用 epoll 异步IO模型进行处理,使其深受欢迎。

做过运维的应该都知道 Python需要使用nginx + uWSGI 提供静态页面访问,和高并发 php 需要使用 nginx + fastcgi 提供高并发 java 需要使用 nginx + tomcat 提供 web 服务

django 原生为单线程序,当第一个请求没有完成时,第二个请求辉阻塞,直到第一个请求完成,第二个请求才会执行。 Django就没有用异步,通过线程来实现并发,这也是WSGI普遍的做法,跟tornado不是一个概念

官方文档解释django自带的server默认是多线程 django开两个接口,第一个接口sleep(20),另一个接口不做延时处理(大概耗时几毫秒) 先请求第一个接口,紧接着请求第二个接口,第二个接口返回数据,第一个接口20秒之后返回数据 证明django的server是默认多线程

启动uWSGI服务器 在django项目目录下 Demo工程名 uwsgi –http 0.0.0.0:8000 –file Demo/wsgi.py 经过上述的步骤测试,发现在这种情况下启动django项目,uWSGI也是单线程,访问接口需要”排队”不给uWSGI加进程,uWSGI默认是单进程单线程

uwsgi –http 0.0.0.0:8000 –file Demo/wsgi.py –processes 4 –threads 2 processes: 进程数 # processes 和 workers 一样的效果 # threads : 每个进程开的线程数经过测试,接口可以”同时”访问,uWSGI提供多线程

Python因为GIL的存在,在一个进程中,只允许一个线程工作,导致单进程多线程无法利用多核多进程的线程之间不存在抢GIL的情况,每个进程有一个自己的线程锁,多进程多GIL。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三.搭配nginx
  • 四.总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档