Опитайте отново задачите за целина преди тяхното обратно броене

работим с 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