我需要创建一个特定的Django用户组(组:送货员(作为芹菜工人。每当该特定组中的任何注册django用户登录时,他们都可以从芹菜队列中选择任务并完成。一旦一个用户完成了任务,它就必须从队列中退出,并且异步地,该组中的下一个登录用户不应该看到它。
正如@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
可能应该是自定义管理器的一种方法。