最近我开始了解Django频道。 有人能告诉我通道和芹菜之间的区别,以及芹菜和渠道的使用地点。
答案 0 :(得分:26)
Channels用于异步处理请求。
Django使用的标准模型是Request-Response,但它有很大的局限性。我们不能在该模型的限制之外做任何事情。
渠道开始允许Web Socket支持和围绕Web套接字构建复杂的应用程序,以便我们可以发送多个消息,管理会话等。
Celery是一个完全不同的东西,它是一个基于分布式消息传递的异步任务队列/作业队列。它主要用于排队任务并安排它们以特定间隔运行。
简单地说,当你需要asynchronous data communication像聊天应用程序一样使用频道时,Celery用于安排任务和事件,例如服务器以固定的时间间隔为特定类型的新闻抓取网页。
答案 1 :(得分:7)
答案 2 :(得分:3)
其他答案,大大解释了差异,但事实上频道& Celery可以共同执行异步池任务。
Channels和Celery都使用后端作为消息和工作守护程序。所以同样的事情可以用两者来实现。
但请记住,Celery是主要制作并且可以处理大多数任务池(重试,结果后端等)的问题,其中Channels绝对不是为了制作的。
答案 3 :(得分:3)
Channels是一个采用Django并将其功能扩展到HTTP以外的项目,以处理Web套接字,聊天协议,IoT协议等。它基于称为ASGI的Python规范构建。
Channels更改了Django,以在其下面并通过Django的同步核心编织异步代码,从而使Django项目不仅可以处理HTTP,还可以处理需要长时间连接的协议-WebSocket,MQTT,聊天机器人,业余无线电等等。
它在保留Django同步和易于使用的特性的同时做到了这一点,使您可以选择编写代码的方式-以Django视图,完全异步或二者结合的方式同步。最重要的是,它提供了与Django的auth系统,会话系统等的集成,比以往任何时候都更容易将纯HTTP项目扩展到其他协议。
它还将这种事件驱动的体系结构与通道层捆绑在一起,该系统使您可以轻松地在流程之间进行通信,并将项目分为不同的流程。
Celery是基于分布式消息传递的异步任务队列。它提供了运行实时操作和安排某些任务以在以后执行的功能。这些任务可以异步或同步执行,这意味着您可能希望在后台运行它们或将它们链接在一起,以使一个任务在成功执行另一任务后得以完成。
答案 4 :(得分:2)
Django通道使Django能够处理的不仅仅是普通的HTTP请求,包括Websockets和HTTP2。可以将其视为异步发生的双向双工通信 没有浏览器刷新。多个客户端可以通过websocket和django频道发送和接收数据,协调这个互通示例,同时群组聊天同时访问客户端。您可以在一定程度上实现与芹菜相似的长时间运行代码的后台处理,但渠道的应用与芹菜的应用不同。
Celery是基于分布式消息传递的异步任务队列/作业队列。以及安排。在leman术语中,我想在后台触发并运行任务,或者我想要一个定期任务,在设定的时间间隔内触发并在后面运行。您也可以以同步方式触发任务并等待直到完成并继续。 因此,关键的区别在于它们所服务的用例和框架的目标
答案 5 :(得分:0)
Django频道:
超越HTTP的协议-处理WebSocket,聊天协议,IoT协议和 更多。
在客户端和服务器之间传递消息(全双工连接)
处理HTTP和Web套接字请求
异步
示例:
芹菜:
这是一个任务队列,着重于实时处理,同时还支持任务调度。
执行长时间运行的后台任务
执行定期任务
异步
示例:
进一步阅读