Django渠道与芹菜有何不同?

时间:2016-07-27 18:50:32

标签: django celery channels

最近我开始了解Django频道。 有人能告诉我通道和芹菜之间的区别,以及芹菜和渠道的使用地点。

6 个答案:

答案 0 :(得分:26)

Django中的

Channels用于异步处理请求。
Django使用的标准模型是Request-Response,但它有很大的局限性。我们不能在该模型的限制之外做任何事情。
渠道开始允许Web Socket支持和围绕Web套接字构建复杂的应用程序,以便我们可以发送多个消息,管理会话等。

Celery是一个完全不同的东西,它是一个基于分布式消息传递的异步任务队列/作业队列。它主要用于排队任务并安排它们以特定间隔运行。

简单地说,当你需要asynchronous data communication像聊天应用程序一样使用频道时,Celery用于安排任务和事件,例如服务器以固定的时间间隔为特定类型的新闻抓取网页。

答案 1 :(得分:7)

    Django中的
  • Channels适用于WebSocketlong-poll HTTP

  • Celery用于后台任务,队列。

答案 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协议和   更多。

  1. 在客户端和服务器之间传递消息(全双工连接)

  2. 处理HTTP和Web套接字请求

  3. 异步

示例:

  • 实时聊天应用程序
  • 更新社交Feed
  • 多人游戏
  • 发送通知

芹菜:

  

这是一个任务队列,着重于实时处理,同时还支持任务调度。

  1. 执行长时间运行的后台任务

  2. 执行定期任务

  3. 异步

示例:

  • 处理视频/图像
  • 发送批量电子邮件

进一步阅读

Example of Celery and Django Channels

Asynchronous vs Synchronous