Как вытащить из другой очереди задачу Celery - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть очередь задач, очередь A и очередь ресурсов, очередь B. При запуске программы имеется конечное число ресурсов, помещенных в очередь B. Задачи могут выполняться, если они могут извлечь ресурс из очередиB, и как только они закончат выполнение, они должны поместить ресурс обратно в очередь B.

Используя Celery, есть ли способ извлечь из другой очереди задачу, чтобы выполнить это?Или это должно быть спроектировано совершенно иначе?

Альтернативой, хотя и с потенциально сниженным параллелизмом, является соединение задачи с ресурсом перед его помещением в очередь задач, затем опрос задачи на предмет завершения и по завершении освобождение этого ресурса и его возврат вочередь задач с другой задачей.Это стандартное решение?

1 Ответ

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

Архитектура, в которой я принял решение, выполняет это с помощью примитива chain в Сельдере, без потери параллелизма.

Чтобы убедиться, что никакие две задачи не используют одновременно один и тот же ресурс, вы можете разделить все задачи среди доступных ресурсов перед добавлением задач в очередь (например, у вас было 10 задач и 3 ресурса, просто назначьте 3задачи для двух ресурсов и 4 для третьего ресурса).Затем для каждого ресурса вызовите задачи с помощью chain(), который говорит Celery выполнить последовательно все задачи для этого ресурса.

...