在Django中无Celery的后台处理

18 投票
3 回答
15533 浏览
提问于 2025-04-17 09:32

我有一个非常小的Django网站部分,用来管理两个用户之间的聊天状态。基本上,第一个用户可以说话3分钟(这段时间其他人不能说),然后第二个用户说话,接着有30秒的暂停,然后这个过程再重复一次。我现在使用数据库和一个叫“RoomState”的模型来管理房间的当前状态(谁可以说话等等)。状态的变化是通过客户端每10秒发送一次“ping”的AJAX POST消息到我的某个视图来实现的,这个视图会检查是否该改变状态了。

这个方法虽然能用,但感觉有点不太靠谱。我在想有没有比django-celery和rabbitmq更轻量级的方式来管理短时间的后台任务。我知道网络和Django的特点是无状态的,但我只是想看看有没有人能给出一个简单的建议,来更可靠地管理状态的变化。

3 个回答

5

我推荐你使用 django-background-tasks。我在几个项目中用过它,效果非常好,适合用来简单地执行任务。这个工具在 Two-Scoops of Django 这本书里也有推荐。

7

我知道除了 Celery 之外,还有一个更轻量级的选择,就是 django-utils中的队列

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

20

我是django-utils的作者,我建议你试试我最近的新项目Huey。这个项目功能更丰富,文档更完善,更稳定,而且可以和任何Python框架一起使用(包括django)。你可以查看文档

撰写回答