首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django、Channels和ASGI线程问题

Django、Channels和ASGI线程问题
EN

Stack Overflow用户
提问于 2018-08-31 07:43:55
回答 1查看 1.5K关注 0票数 3

我在使用django和通道(在asgi模式下)时遇到了问题当我设置django通道并使用asgi模式时,我的应用程序会为每个http请求和我从通道发送的每个消息创建一个新线程

例如,假设我的应用程序是一个简单的回声聊天服务器,当我运行服务器并请求连接到套接字作为客户端时,线程增加了,而且当我再次向套接字发送一些东西时,线程增加了每条消息。

你知道为什么吗?我如何修复或限制它?

EN

回答 1

Stack Overflow用户

发布于 2018-12-14 18:28:15

对于同步请求,Channels会生成一个ThreadPool。如果它在事件循环中运行HTTP请求,则每次数据库查询和缓存命中都会锁定事件循环。

如果您不设置环境变量ASGI_THREADS,它将使用由concurrent.futures.ThreadPool设置的默认值,IMO太高,因为它是CPU核心数乘以5。将ASGI_THREADS设置为一个较小的数字,并使用多个Daphne进程。通过使用较少的线程和多个进程,您可以避免一些由Python的全局解释器锁引起的速度减慢。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52110761

复制
相关文章
Django Channels配置
Channels包装了Django的原生异步视图支持(Django3之后支持异步视图),允许Django项目不仅可以处理HTTP,还可以处理WebSockets,MQTT等。Channels提供了与Django的身份验证系统,会话系统等的集成,使得将纯HTTP项目扩展到其他协议比以往任何时候都更容易。因此,通常我们在Django3上实现websocket还是会使用channels
zy010101
2021/12/07
1.2K0
Django Channels配置
Python 异步 ASGI 服务器及框架
在 Python3.5 之后增加 async/await 特性之后,异步编程变得异常火爆,越来越多开发者投入异步的怀抱。
Python编程与实战
2020/03/19
3.3K0
Python 异步 ASGI 服务器及框架
Django使用channels实现通信
安装依赖包 pip install channels channels-redis .
王瑞MVP
2022/12/28
4510
Django使用channels实现通信
vue+django实现websocket连接
注册corsheaders和channels,corsheaders主要是用来解决跨域问题的。
py3study
2021/02/25
4K3
vue+django实现websocket连接
Django使用Channels实现websocket
由于项目有个需要实时显示状态的需求,搜索了各种实现方法,看来只有websocket最靠谱,但django原生是不支持websocket的,最终发现了chango-channels这个项目。可以帮我们实现我们的需求。
earthchen
2020/09/24
2.5K0
wsgi和asgi
wsgi和asgi都是Web服务器网关接口。它们是一种规范,描述了Web服务器如何与Web应用程序(客户端)通信,以及如何将Web应用程序链接在一起以处理一个请求。
zy010101
2021/12/08
1.3K0
使用daphne部署django channles websocket 项目
在上一篇文章中,链接如下:https://www.cnblogs.com/xiao987334176/p/14361893.html
py3study
2021/03/30
6.6K0
django-channels实现群聊
Layer是一种通信系统。它允许多个消费者实例相互交谈,以及与 Django 的其他部分交谈。借助Layer可以很方便的实现群聊功能。无需我们手动管理websocket连接。
zy010101
2021/12/08
1.7K0
django3 websockets
现在Django 3.0附带了对ASGI的支持,将Websockets添加到Django应用中不需要任何额外的依赖关系。 在本文中,您将学习如何通过扩展默认的ASGI应用程序来使用Django处理Websocket。 我们将介绍如何在示例ASGI应用程序中处理Websocket连接,发送和接收数据以及实现业务逻辑。
py3study
2020/10/16
3.5K0
teprunner测试平台Django引入pytest完整源码
pytest登场!本文将在Django中引入pytest,原理是先执行tep startproject命令创建pytest项目文件,然后从数据库中拉取代码写入文件,最后调用pytest命令运行用例。为了提高运行效率,用例运行是并行的,采用了多线程和多进程,两个都有,这在最后有个单独小结进行比较完整的说明。因为用例运行是异步的,所以前端并不知道什么时候执行完才能拿到运行结果,可以发多个HTTP请求轮询,但这种方式并不优雅,本文将采用WebSocket来实现用例结果查询。具体内容为:
dongfanger
2021/04/02
1.1K0
实战 | 使用 Python 开发一个在线聊天室
在线聊天室在如今的互联网是一个很常见的产品,在各类电商的网页客服中,我们都可以接触到在线聊天。还有一个培训机构,你一打开他的网页,立马就弹出一个在线聊天框,防不胜防。
州的先生
2021/09/08
3.9K1
详述WebSocket原理
WebSocket协议和HTTP协议一样,都是在ISO七层模型的最顶层——应用层。WebSocket允许服务器端主动向客户端推送数据。在WebSocket协议中,客户端浏览器和服务器只需要完成一次握手就可以创建持久性的连接,并在浏览器和服务器之间进行双向的数据传输——全双工通讯。
全栈程序员站长
2022/07/11
2.7K0
详述WebSocket原理
Django Channels实现Zabbix实时告警到页面
Geewolf:《FastDFS分布式存储实战》作者,国内第一本《Ansible中文手册》译者、Flamingo、FMS作者
Zabbix
2021/02/03
2.3K0
详述WebSocket原理
WebSocket协议和HTTP协议一样,都是在ISO七层模型的最顶层——应用层。WebSocket允许服务器端主动向客户端推送数据。在WebSocket协议中,客户端浏览器和服务器只需要完成一次握手就可以创建持久性的连接,并在浏览器和服务器之间进行双向的数据传输——全双工通讯。
码农编程进阶笔记
2021/07/20
2.1K0
Django Channels websocket 搭建实践(实现长链接消息通知功能)
信道层是一种通信系统。它允许多个消费者实例彼此交谈,以及与 Django 的其他部分交谈。 通道层提供以下抽象: 通道是一个可以将邮件发送到的邮箱。每个频道都有一个名称。任何拥有频道名称的人都可以向频道发送消息。 一组是一组相关的通道。一个组有一个名称。任何具有组名称的人都可以按名称向组添加/删除频道,并向组中的所有频道发送消息。无法枚举特定组中的通道。 每个使用者实例都有一个自动生成的唯一通道名,因此可以通过通道层进行通信。 在我们的聊天应用程序中,我们希望同一个房间中的多个聊天消费者实例相互通信。为此,我们将让每个聊天消费者将其频道添加到一个组,该组的名称基于房间名称。这将允许聊天用户向同一房间内的所有其他聊天用户发送消息。 我们将使用一个使用 redis 作为后备存储的通道层。要在端口 6379 上启动 Redis 服务器,首先系统上安装 redis,并启动。
卓越笔记
2023/02/18
2.2K0
Django Channels websocket 搭建实践(实现长链接消息通知功能)
Django使用Channels实现WebSocket--上篇
WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket允许服务端主动向客户端推送数据。在WebSocket协议中,客户端浏览器和服务器只需要完成一次握手就可以创建持久性的连接,并在浏览器和服务器之间进行双向的数据传输。
37丫37
2019/04/25
4K0
Django使用Channels实现WebSocket--上篇
django2.2+Daphne+nginx+supervisor 生产环境部署
之前项目中使用了 webscoket 进行实现消息实时通知,我们是另外单独运行了一个消息推送服务项目,使用了django-channels 实现websocket,项目使用的是asgi 协议,不是原先的wsgi协议。运行项目时,提示也和wsgi的不一样,如下图:
用户4945346
2020/07/31
1.6K0
django2.2+Daphne+nginx+supervisor 生产环境部署
使用Django+channels+Python3.7时提交Form表单: 400 Bad Request问题
上次在自己的博客项目上尝试了Python3.7的beta版之后,意识到Celery因为惯性还是不能兼容3.7,所以不在做升级的打算。直到前不久开始弄一个简单的内部社区,针对购买视频的同学。这也是个人项目,所以激进点没什么关系。
the5fire
2019/03/01
2.1K0
点击加载更多

相似问题

django channels ImproperlyConfigured:在ASGI_APPLICATION模块中找不到'app‘

51

Django Channels ASGI - AppRegistryNotReady:应用程序还没有加载

371

Django 3.1.5和Channels 3.0.3 websocket问题

129

django_redis、channels_redis、asgi_redis和redis服务器有什么区别?

1157

Django daphne asgi: Django只能处理ASGI/HTTP连接,不能处理websocket

2288
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文