问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何解决django中的多并发(2023年最新分享)

发布网友 发布时间:2024-10-01 07:00

我来回答

1个回答

热心网友 时间:2024-10-09 15:12

导读:今天首席CTO笔记来给各位分享关于如何解决django中的多并发的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

djangowebsocket

做个比喻,如果说A是服务端,B是客户端,现在要在A家里吃火锅,虽然A说你人来就行,但是B心想总得带点东西过去,于是去了市场.

先到了蔬菜店,B想买点菠菜,但又怕A家里已经有了,于是给A打电话

B:"我带点菠菜过去吧?"

A:"好"

然后挂断.过一会儿到了水产区

B:"我带点虾过去吧?"

A:"不用"

...如此反复多了之后A突然发现自己确实少准备了一些东西,于是A给主动给B打了电话

A:"我忘准备蘸料了,你买点,然后先别挂掉"

...

A:"再买瓶酒"

...

这就是websocket了

django当让也提供对websocket的支持,虽然这似乎不是他更擅长的东西.我们可以通过channels实现websocket连接

诸如上述例子的场景都是合适的场景

举例来说的话比如聊天室,每个人发送的消息都要实时显示在别人的屏幕上.

比如说数据监控,波动状态也要实时的呈现在屏幕上,而不是依赖于使用者自己刷新.

需要安装channels,asgi_redis,asgiref,channels_redis.后三个未必都需要装,记不太清了,总之安装过程都在channels的使用文档上.

INSTALL_APPS中需要加上"channels",需要注意的是因为这是一个list,是有先后顺序的,最好把它加在第一个.

这里我们的channel通过redis实现,要在settings.py中配置

这里还有点小坑,官方文档里的hosts不是这种格式,是"uri"这种模式,但是如果你在设置redis密码时机智的设置了特殊符号('#$%'这种),你就会发现redis的uri直接就用不了了,期间尝试各种方法,转义什么的也试了都不行,然后去github上开了个issue,结果作者说我们是通过aioredis连接的,你去找他们的文档吧....

然后就找到了这种方式.

常规的WSGI不支持websocket,所以还需要配置ASGI

ASGI_APPLICATION='project.routing.application'

同wsgi的配置一样,这是指向project文件夹下routing.py文件的application

这里建议大家跟这官方教程的Tutorial走一遍.有个比较悲剧的地方就是网上可以搜到许多channels使用指南,大多都是搭个简易聊天室什么的,然而你用起来可能发现存在各种报错,因为channels升了2.0之后更改了一些方法,而那些教程里基本全都是1.x的版本.

简单说下,首先startapp叫chat,假如这里我们没有进行前后端分离,里面有templates,两个html:index和room分别对应首页和某一个聊天室

新建consumers.py来写websocket方法

如上,connect和disconnect含义分别如函数名.因为是聊天室,所以同一个聊天室内的人应该消息共享,用room_group_name来区分所在的频道.

receive和chat_message是对消息的处理.当一个用户发送消息时,前端把消息通过websocket发送过来,receive收到消息提取关键内容,通过chat_message发送给组内的所有连接.这时保持连接的所有组内人员都会收到这条消息推送,前端收到推送再显示在屏幕上.

定义websocket的地址

类似于django的url(consumers.py就类似于views.py),同级新建routing.py

统一用ws/来区分websocket的连接

剩下常规的页面配置和django一样

views.py:

urls.py:

注意:如果网站是http,连接使用ws,如果是https要修改成wss

剩下的自己找资料吧,笔者对前端了解的不多

本地的话runserver就好了,但是在线上还是得更改启动方式应对高并发.

传统的uwsgi不支持websocket.

gunicorn好像可以同时支持websocket,但是性能不太ok

这里我们用daphne

这里需要额外开个服务,专门负责处理websocket.

ingress中要配置路由跳转

Django本身提供了runserver,为什么不用来部署

???Django本身自带了runserver,但是我们只是在测试的时候,会用到它,而在真正的生产部署一般都会使用uwsgi+nginx方式。

????因为我们的生产环境一般都会有很大的并发访问量,而django自带的runserver非常不稳定,最大连接数大约在几十个,过多的并发连接,导致服务崩溃,而且安全性上也不好。

????而nginx可以支持高并发连接,官方给出最大连接数在50000个左右,实际生产中,大约也在20000~40000个左右,内存消耗少,稳定性高,支持热部署(可以在不间断服务的情况下,进行版本升级)。

???相对比较而言,Django自带的runserver,只适合我们在测试的时候使用。

python高并发web框架有哪些

python的web框架很多

django(大而全,模板,orm都自带)

flask(pocoo出品,比属精品,自带jinja2模板,可以替换)

web.py(这个我没用过,作者自杀,白瞎了一个高手)

bottle(只有一个文件的框架,需要自己构建整个开发体系)

uliweb(中国人开发的,也很不错)

Tornado(异步框架,适合长连接,比如在线聊天之类的)

Python框架虽然说是百花齐放,但仍然有那么一家是最大的,它就是Django。Django为人所称道的地方主要有:

①完美的文档,Django的成功,我觉得很大一部分原因要归功于Django近乎完美的官方文档(包括Djangobook)。

②全套的解决方案,Django象Rails一样,提供全套的解决方案(full-stackframework+batteriesincluded),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,开发网站应手的工具Django基本都给你做好了,因此开发效率是不用说的,出了问题也算好找,不在你的代码里就在Django的源码里。

③强大的URL路由配置,Django让你可以设计出非常优雅的URL,在Django里你基本可以跟丑陋的GET参数说拜拜。

④自助管理后台,admininterface是Django里比较吸引眼球的一项contrib,让你几乎不用写一行代码就拥有一个完整的后台管理界面。

django并发请求是多线程吗

用Django搭了个环境,创建了一个App。

我想要测试假如同时多个请求进来Django的处理方式,于是写了一下代码在View.py中:

Pythoncode?

defarchive(request):

print("start")

time.sleep(5)

print("end")

returnHttpResponse("HellowWorld")

django多线程+uWSGI多线程遇到的坑

当django中使用了多线程时,由于uwsgi默认不开启多线程,所以我们需要为uwsgi手动开启多线程。

闲言少叙,直接上配置。

在uwsgi的配准文件uwsgi.ini中增加下面的threads字段

这样就可开启多线程。

django部署的一个爬虫服务。客户端发送一个请求后,django立即开启一个线程,去执行耗时的爬虫任务,django不等待爬虫结果,便先返回给客户端“请等待”的提示,在爬虫任务执行完毕后,再通过轮询或websocket返回给客户端爬虫任务的结果。

使用django的runserver运行项目没问题,但当使用nginx+uwsgi运行项目时,爬虫的HTTP请求不返回结果;当使用uwsgi单独拉起项目时,爬虫的HTTP返回结果但速度奇慢。

最后发现是uwsgi默认不支持多线程,需要开启多线程(方法如上),即可解决问题。

结语:以上就是首席CTO笔记为大家整理的关于如何解决django中的多并发的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
帮忙介绍几个昆山好吃的地方 ...古代文学论述题——举例说明庄子散文的特点。谢谢(⊙o⊙)哦知 ... 天津滨海职业大学智能制造装备技术学什么 智能制造装备技术专业就业方向有哪些 智能制造装备技术专业主要学什么 公孙衍人物故事 吹奏乐器巴乌 巴乌简介 倒库要打转向灯 倒车入库要开转向灯吗 ...书生轻议冢中人,冢中笑尔书生气 请翻译下这句话。 请帮忙把这句翻译成英文.!要准确! 为什么我老是在意别人的存在,首先申明我认为自己并不是很差,在做事的... ...总会考虑到这么说别人肯定怎样想怎样反应.我最好不要说? 求两部电视剧名字(一港台一内地) 补脑提高记忆力的药有哪些 ...其中黑皮是正五边形,白皮是正六边形,若黑皮和白皮一共48块制成此专... ...而成的,黑皮可看作正五边形,白皮可看作正六边形.(1)一只足 元稹为御史,以直立其身。 “屈轶无佞人可指”的出处是哪里 “屈轶不生神豸死”的出处是哪里 屈轶草如何识别佞人? 屈轶是哪个朝代的藏书家? 屈轶是什么意思? 金蝉脱壳的表面意思是什么 梦见春节拜年是什么兆头 ping命令怎么测试网络连通性? 怎么用ping命令检测网络连通性? 有哪些简单易学的家常菜推荐? 有哪些比较简单易学的家常菜品推荐? 豆腐好吃但男人需谨慎,男人吃豆腐要注意哪些 我手机“设置”那个图标不见了,以前都是靠航海桌面直接在桌面上输字母... 我今天手机(安卓系统)刚更新了GO桌面,手机上面的图标都成白色字体了,很... ...了主题后安装不了...我把主题删除之后,我桌面的壁纸就从原来的全屏... 我的电脑桌面怎么成这样子了。求解决方案. 如图./一刷新就闪一下.不... 电瓶和充电器有什么区别 求无限恐怖同人,一定铭烟薇或赵樱空是女主,不是的不要,后宫的也可以... 无限恐怖同人小说 男主穿越无敌 女主是詹岚,铭烟薇,樱空的 而且要虐... 有主角cp是和铭烟薇配的无限同人吗··· 暗黑破坏神不朽哪个职业PVP厉害-PVP职业推荐 暗黑破坏神不朽职业推荐 最强职业选择推荐 暗黑破坏神不朽搬砖职业哪个强_刷图打金最快职业推荐 全球公爵黑卡有什么用? 步步高学习机H3升级成2.0后,为什么没有国学经典、宠物单词等应用... 步步高学习机9588gomeboy里游戏怎么退 佛山星萃健康文化传播有限公司 网络营销 海广信公司简介 ...急!请大师帮忙算姻缘,1980年农历正月十三晚上7.8点钟出生的... ...婚姻运程,1980年农历正月十三晚上7.8点钟出生的女孩 1970年正月十三晚上九点出生,今年运程如何