Как получить задания Celery, которые еще не запущены, используя Django? - PullRequest
3 голосов
/ 02 апреля 2012

После прочтения документации Celery похоже, что я должен быть в состоянии использовать следующий код Python для перечисления задач в очереди, которые еще не были получены:

from celery.task.control import inspect
i = inspect()
tasks = i.reserved()

Однако при запуске этого кода список задач пуст, даже если в очереди ожидают элементы (я убедился, что они определенно находятся в очереди с помощью django-admin). То же самое верно для использования эквивалента командной строки:

$ celeryctl inspect reserved

Так что, я полагаю, это не то, для чего эта команда? Если нет, каков приемлемый способ получения списка задач, которые еще не начались? Нужно ли вести собственный список идентификаторов задач в коде, чтобы запрашивать их?

Причина, по которой я спрашиваю, заключается в том, что я пытаюсь справиться с ситуацией, когда в очереди стоят две задачи, которые выполняют операцию записи для одного и того же объекта в базе данных. Если обе задачи выполняются параллельно и задача 1 занимает больше времени, чем задача 2, она перезапишет выходные данные из задачи 2, но я хочу получить выходные данные из самой последней задачи, то есть задачи 2. Поэтому я планировал отменить все незавершенные задачи, которые работают с объект каждый раз, когда добавляется новая задача, которая будет записывать в тот же объект.

Спасибо
Том

1 Ответ

0 голосов
/ 21 марта 2013

Вы можете увидеть отложенные задачи, используя scheduled вместо reserved.

$ celeryctl inspect scheduled

...