Установить определенную группу пользователя Django в качестве работника сельдерея - PullRequest
0 голосов
/ 21 ноября 2018

Мне нужно составить определенную группу пользователей Django (группа: работник доставки) в качестве работника сельдерея.Всякий раз, когда любой зарегистрированный пользователь django из этой конкретной группы входит в систему, он может выбрать задачу из очереди сельдерея и завершить ее.Как только один пользователь завершает задачу, она должна быть исключена из очереди и асинхронно не должна быть видна следующему вошедшему в систему пользователю из этой группы.

1 Ответ

0 голосов
/ 21 ноября 2018

Как заметил @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, вероятно, должен быть методом пользовательского менеджера .

...