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