Повторите задачи сельдерея до обратного отсчета

мы используем Django v1.10 с celery v4.0.2, rabbitMQ v3.5.7 и flower v0.9.1, а также новичок с celery, rabbitMQ и flower.

Существует функция x(), которая настроена на повторную попытку через 7 дней в случае сбоя. У нас есть 1000 экземпляров x, повторно поставленных в очередь на производство. Мы устранили проблему и хотели бы повторить попытку как можно скорее.

Есть ли способ принудительно повторить попытку до запланированного времени?


person Prakhar Gupta    schedule 17.07.2017    source источник


Ответы (2)


Если вы можете получить список задач, это вопрос вызова task.retry(exc=exc) для каждой из них. См. документы.

Попробуйте celery.task.control.inspect().reserved() и посмотрите, сможете ли вы отфильтровать задачи таким образом. Пример здесь.

Вы получаете объект задачи из его идентификатора с этим, за этот ответ.

result = MyTask.AsyncResult(task_id)
result.get()
person Jared Nielsen    schedule 17.07.2017
comment
Я пробовал это, но inspect.scheduled() не возвращает объект задачи, а его словарное представление, и поэтому я не могу вызвать для него task.retry. Я пытался найти, как получить объект задачи из идентификатора задачи, но не смог его найти. Было бы здорово, если бы вы могли поделиться альтернативой / поделиться тем, как получить объект задачи из его идентификатора. - person Prakhar Gupta; 18.07.2017
comment
@PrakharGupta Попробуйте MyTask.AsyncResult() - person Jared Nielsen; 18.07.2017

Поэтому, перепробовав множество вещей, мне пришлось решить эту проблему, получив список запланированных задач и их аргументов и вызвав функции в цикле for с аргументами.

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

i = inspect()
scheduled = i.scheduled()
for key in scheduled:
    for element in scheduled[key]:
        reqDict = element['request']
        if reqDict['type']=='module.function':
            module.function.delay(converted_arguments)
            revoke(reqDict['id'], terminate=True)
person Prakhar Gupta    schedule 18.07.2017