Выполнение функции непосредственно перед\после отзыва задания в celery
Для демонстрации у меня есть класс, который делает примерно следующее:
class Writer:
def __init__(self, num):
self.num = num
def write(self):
for i in range(0, num):
with open("/outfile", "w") as o:
o.write(i)
def cleanup(self): # should be executed when write has not finished
os.system('rm -rf /outfile')
Я использую общую задачу в celery, чтобы выполнить ее следующим образом:
@shared_task
def mytask():
w = Writer(100)
w.write()
return "Done"
Я использую django и DRF, и у меня есть конечная точка api, которая получает идентификатор задачи и отзывает задачу с помощью revoke(task_id, terminate=True)
.
Моя цель - запустить функцию cleanup
из класса Writer
, когда происходит отзыв.
Причина, по которой я не могу просто запустить cleanup
после отзыва как обычную функцию, заключается в том, что ей нужно получить доступ к атрибутам своего класса (в реальном сценарии, а не в этом примере), а у каждого класса может быть своя функция cleanup
.
Как я могу обнаружить отзыв в mytask()
? Есть ли решение с использованием чего-то вроде try except? Переместить задачу в задачу, основанную на классах? Не нашел ничего в Интернете или в документации.
Заранее спасибо.