Итак, у меня есть задача, которая создает рабочий каталог и выполняет всю свою работу. Задача вызывается от сервера A и выполнена на рабочих серверах.Задача задачи сельдерея в обработчике task_revoked
Мне нужно убедиться, что рабочий каталог удален после завершения задачи/отменил.
Я добавил задание отозвана обработчика и это выглядит следующим образом:
@task
def my_task(value):
task_id = current_task.request.id
work_dir = os.path.join(BASE_WORK_DIR, task_id)
os.makedirs(work_dir)
try:
# Do work...
finally:
shutil.rmtree(work_dir)
@task_revoked.connect(sender=my_task)
def my_task_revoked_handler(*args, **kwargs):
# FIXME: delete work_dir
print args
#()
print kwargs
# {'terminated': True, 'signal': <Signal: Signal>, 'expired': False, 'sender': <@task: myapp.core.tasks.my_task>, 'signum': '15'}
Моя проблема когда сервер А отменяет задачу я не могу выдать очистки каталога работы в отозвана обработчика, поскольку он Безразлично У меня есть task_id.
Есть ли способ получить идентификатор задачи из этого конкретного обработчика сигнала? Немного other Signals имейте это, и я посмотрел источник, где они выданы, и по какой-то причине этот Сигнал не снабжен task_id.
Задача sender
содержит функцию trace_task: {'__trace__': <function trace_task at 0x3ee8230>}
, но я не вижу, как я могу ее использовать, поскольку сама функция требует task_id.
Любые другие идеи приветствуются.
Поздно лучше, чем никогда, я полагаю =) – JayLev