没有 Celery 的 Django 中的后台处理

Posted

技术标签:

【中文标题】没有 Celery 的 Django 中的后台处理【英文标题】:Background processing in Django without Celery 【发布时间】:2012-02-02 14:14:14 【问题描述】:

我有一个 Django 站点的一小部分,它保持两个用户之间的主持聊天会话的状态。基本上,第一个用户说话 3 分钟(其他人都不能),然后第二个用户说话,然后停顿 30 秒,这个过程再重复一次。我目前正在使用数据库和“RoomState”模型来管理房间的当前状态(谁可以说话等)。状态转换受到客户端每 10 秒向我的一个视图发送“ping”AJAX POST 消息的影响,该视图检查是否是时候更改状态了。

这行得通,但绝对感觉很hacky。我想知道是否有比 django-celery + rabbitmq 更轻量级的东西来管理计时器上的短期后台任务。我意识到 web/Django 的本质是无状态的,但我只是想看看是否有人有一个简单的建议来以更可靠的方式管理状态转换。

【问题讨论】:

如果rabbitmq太重,考虑改用Redis后端。 请考虑更新所选答案。 我完全同意 OP 每次我们需要升级 Django 或 Celery 的两个中断之一。我们现在正在网上扫描第 10 号头痛。 Celery 在 git hub 上有 496 个未解决的问题和高达 37 个永远不会被拉入的拉取请求。我们曾经是可靠的计划任务,而 celery 不是。开发人员浪费时间集成另一个没人在乎的后端。 【参考方案1】:

我推荐django-background-tasks。我已经在几个项目中使用过它,它作为一个简单的任务运行器确实做得很好。 Two-Scoops of Django也推荐过。

【讨论】:

【参考方案2】:

这里是 django-utils 的作者,我建议尝试我的新项目 Huey -- 具有更丰富的功能集、更好的文档、更稳定并适用于任何 python 框架(包括 django)。 Docs.

【讨论】:

【参考方案3】:

我只知道 Celery 的一种更轻量级的替代品:Queue in django-utils。

另一种方法是直接使用subprocess 模块,但您可能需要解决一些在 Celerydjango-utils 中已经解决的问题。

【讨论】:

你可能想使用github.com/coleifer/huey 而不是我不再维护 django-utils 你可能想看看Django Q,它是 django 特有的,作者的既定目标正是你所要求的。仅供参考:我没有隶属关系,也不认识作者。

以上是关于没有 Celery 的 Django 中的后台处理的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中使用 Celery 上传和处理大型 excel 文件?

Django中使用celery来异步处理和定时任务

celery在Django中的使用

Django中使用celery完成异步/耗时/后台任务

异步任务队列Celery在Django中的使用

Celery在Django中的使用介绍