Django 频道与芹菜有何不同?

How are Django channels different than celery?

最近开始了解Django频道。 谁能告诉我通道和芹菜的区别,以及在哪里使用芹菜和通道。

Django 中的

Channels 用于异步处理请求。
Django 使用的标准模型是 Request-Response,但它有很大的局限性。我们无法在该模型的限制之外做任何事情。
Channels 的出现允许 Web Socket 支持和围绕 Web Sockets 构建复杂的应用程序,这样我们就可以发送多条消息、管理会话等。

Celery是完全不同的东西,它是一个基于分布式消息传递的异步任务queue/job队列。它主要用于排队任务并按特定时间间隔将它们调度到 运行。

简单地说,当您需要 asynchronous data communication 时使用频道,例如聊天应用程序,而 Celery 用于安排任务和事件,例如服务器以固定的时间间隔在网络上抓取某种类型的新闻。

Django 通道使 Django 能够处理的不仅仅是普通的 HTTP 请求,包括 Websockets 和 HTTP2。将此视为异步发生的 2 路双工通信 没有浏览器刷新。多个客户端可以通过 websocket 和 django 通道发送和接收数据,协调这个相互通信的例子,一个同时客户端同时访问的群聊。 运行ning 长代码的后台处理可以在一定程度上实现类似于celery 的后台处理,但是channel 的应用与celery 不同。

Celery 是一个基于分布式消息传递的异步任务queue/job队列。以及调度。用外行的话来说,我想在后台触发和 运行 一个任务,或者我想要一个定期任务,在设定的时间间隔内触发并在后面 运行s 。您还可以以同步方式触发任务以及触发并等待直到完成并继续。 因此,关键区别在于它们所服务的用例和框架的目标

  • Channels 在 Django 中用于 WebSocket, long-poll HTTP.

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

其他答案,很好地解释了差异,但实际上 Channels 和 Celery 都可以共同执行异步池化任务。

Channels 和 Celery 都使用后端来处理消息和工作守护进程。所以同样的事情可以用两者来实现。

但请记住,Celery 主要用于并且可以处理大多数任务池问题(重试、结果后端等),而 Channels 绝对不是用于这些问题的。

Django 频道:

beyond HTTP - to handle WebSockets, chat protocols, IoT protocols, and more.

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

  2. 处理 HTTP 和 Web-sockets 请求

  3. 异步

示例:

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

芹菜:

It’s a task queue with focus on real-time processing, while also supporting task scheduling.

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

  2. 执行周期性任务

  3. 异步

示例:

  • 处理中Videos/images
  • 发送群发电子邮件

进一步阅读

Example of Celery and Django Channels

Asynchronous vs Synchronous

Channels 是一个采用 Django 并将其能力扩展到 HTTP 之外的项目——处理 Web 套接字、聊天协议、IoT 协议等。它建立在称为 ASGI 的 Python 规范之上。

Channels 更改 Django 以在 Django 的同步核心之下编织异步代码,并通过 Django 的同步核心,使 Django 项目不仅可以处理 HTTP,还可以处理需要长连接的协议 -运行ning 连接 - WebSockets、MQTT、聊天机器人、业余爱好者收音机等。

这样做的同时保留了 Django 的同步和易于使用的特性,允许您选择编写代码的方式 - 像 Django 视图一样的同步、完全异步或两者的混合。最重要的是,它提供了与 Django 的身份验证系统、会话系统等的集成,使您比以往任何时候都更容易将仅 HTTP 的项目扩展到其他协议。

它还将这种事件驱动的架构与通道层捆绑在一起,通道层是一个允许您轻松地在进程之间进行通信的系统,并将您的项目分成不同的进程。

Celery是一个基于分布式消息传递的异步任务队列。它为 运行 实时操作提供功能,并安排一些任务稍后执行。这些任务可以异步或同步执行,这意味着您可能更喜欢在后台 运行 它们或将它们链接起来,使一个任务在另一个任务成功执行后完成。