Выполнение функции непосредственно перед\после отзыва задания в 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? Переместить задачу в задачу, основанную на классах? Не нашел ничего в Интернете или в документации. Заранее спасибо.

Вернуться на верх