在Django中无Celery的后台处理
我有一个非常小的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 模块,但你可能需要解决一些在 Celery 和 django-utils 中已经解决的问题。