将特定的Django用户组设置为celery worker

时间:2018-11-21 07:15:56

标签: django celery django-celery django-middleware

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

1 个答案:

答案 0 :(得分:0)

正如@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应该是custom manager的方法。