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 和 Celery 都可以共同执行异步池化任务。
Channels 和 Celery 都使用后端来处理消息和工作守护进程。所以同样的事情可以用两者来实现。
但请记住,Celery 主要用于并且可以处理大多数任务池问题(重试、结果后端等),而 Channels 绝对不是用于这些问题的。
Django 频道:
beyond HTTP - to handle WebSockets, chat protocols, IoT protocols, and
more.
在客户端和服务器之间传递消息(全双工连接)
处理 HTTP 和 Web-sockets 请求
异步
示例:
- 实时聊天应用
- 更新社交源
- 多人游戏
- 发送通知
芹菜:
It’s a task queue with focus on real-time processing, while also supporting task scheduling.
执行长时间 运行 后台任务
执行周期性任务
异步
示例:
- 处理中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是一个基于分布式消息传递的异步任务队列。它为 运行 实时操作提供功能,并安排一些任务稍后执行。这些任务可以异步或同步执行,这意味着您可能更喜欢在后台 运行 它们或将它们链接起来,使一个任务在另一个任务成功执行后完成。
最近开始了解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 和 Celery 都可以共同执行异步池化任务。
Channels 和 Celery 都使用后端来处理消息和工作守护进程。所以同样的事情可以用两者来实现。
但请记住,Celery 主要用于并且可以处理大多数任务池问题(重试、结果后端等),而 Channels 绝对不是用于这些问题的。
Django 频道:
beyond HTTP - to handle WebSockets, chat protocols, IoT protocols, and more.
在客户端和服务器之间传递消息(全双工连接)
处理 HTTP 和 Web-sockets 请求
异步
示例:
- 实时聊天应用
- 更新社交源
- 多人游戏
- 发送通知
芹菜:
It’s a task queue with focus on real-time processing, while also supporting task scheduling.
执行长时间 运行 后台任务
执行周期性任务
异步
示例:
- 处理中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是一个基于分布式消息传递的异步任务队列。它为 运行 实时操作提供功能,并安排一些任务稍后执行。这些任务可以异步或同步执行,这意味着您可能更喜欢在后台 运行 它们或将它们链接起来,使一个任务在另一个任务成功执行后完成。