首页 > 解决方案 > 将特定组的 Django 用户设置为 celery worker

问题描述

我需要让一组特定的 Django 用户(组:送货员)作为芹菜工人。每当来自该特定组的任何注册 django 用户登录时,他们都可以从 celery 队列中选择任务并完成。一旦一个用户完成一项任务,它就必须从队列中出列,并且异步它不应该对该组中的下一个登录用户可见。

标签: djangocelerydjango-celerydjango-middleware

解决方案


正如@Anup Yadav 所说,Celery 不适合这个用例。将您的任务存储在数据库中工作正常,您只需要锁定行使用select_for_update以确保不能选择两次任务。像这样的东西应该工作:

class Task(models.Model):
    is_available = models.BooleanField(default=True)

def pick_task():
    """
    Selects a task and marks it as unavailable.

    Returns Task or None, if no Task is available.
    """  
    task = Task.objects.select_for_update().filter(is_available=True).first()
    if task is not None:
        task.is_available = False
        task.save()
    return task

检查用户是否拥有正确的组将在视图中完成。请注意,这pick_task可能应该是自定义管理器的一种方法。


推荐阅读