Я бегу Django, Celery и RabbitMQ. То, что я пытаюсь достичь, состоит в том, чтобы гарантировать, что задачи, связанные с одним пользователем, выполняются по порядку (в частности, по одному в то время я не хочу совмещать задачи на пользователя)Как обеспечить выполнение выполнения задачи для пользователя с помощью Celery, RabbitMQ и Django?
- всякий раз, когда добавляется новая задача для пользователя, это должно зависеть от недавно добавленной задачи. Дополнительная функциональность может включать не добавление задачи в очередь, если задача этого типа поставлена в очередь для этого пользователя и еще не запущена.
Я сделал некоторые исследования и:
- Я не мог найти способ связать вновь созданную задачу с уже находится в очереди один в самом сельдерее, цепи, кажется, только в состоянии связать новые задачи ,
- Я думаю, что обе функции можно реализовать с помощью специального обработчика сообщений RabbitMQ, хотя в конце концов это может быть сложно.
- Я также читал о celery-tasktree, и это может быть самым простым способом для обеспечения порядка выполнения, но как связать новую задачу с уже «
applied_async
» task_tree или queue? Есть ли способ, которым я мог бы реализовать эту дополнительную не дублируемую функциональность с помощью этого пакета?
Edit: Существует этот и этот «замок» пример в celery cookbook и как концепция хорошо, я не могу видеть возможный способ заставить его работать как положено в моем случае - просто, если я не могу получить блокировку для пользователя, задача должна быть повторена, но это означает, что нужно довести ее до конца очереди.
Какой был бы лучший способ действий здесь?
Я предполагаю, что вы не знаете, какие задачи для конкретного пользователя перед установкой задачи? –
Почему бы не создать очередь самостоятельно (на пользователя) и взять сельдерей оттуда? – trinchet