Вот что у меня есть:
import youtube_dl # in case this matters
class ErrorCatchingTask(Task):
# Request = CustomRequest
def on_failure(self, exc, task_id, args, kwargs, einfo):
# If I comment this out, all is well
r = requests.post(server + "/error_status/")
....
@app.task(base=ErrorCatchingTask, bind=True, ignore_result=True, max_retires=1)
def process(self, param_1, param_2, param_3):
...
raise IndexError
...
Рабочий сгенерирует исключение, а затем, по-видимому, создаст новое задание с другим идентификатором задачи Received task: process[{task_id}
Вот несколько вещей, которые я пробовал:
- Вместо них импортируются
from celery.worker.request import Request
и переопределяются функции on_failure
и on_success
. app.conf.broker_transport_options = {'visibility_timeout': 99999999999}
@app.task(base=ErrorCatchingTask, bind=True, ignore_result=True, max_retires=1)
- Поворотвыкл
DEBUG
режим - Установите для ведения журнала значение
info
- Установите для
CELERY_IGNORE_RESULT
значение false ( Можно ли использовать запросы Python с сельдереем? ) import requests as apicall
, чтобы исключить конфликт пространства имен - Патч денег
requests
Сельдерей + Eventlet + неблокирующие запросы - Переместить
ErrorCatchingTask
в отдельный файл
Если я не использую какие-либо функции ловушек, работник просто сгенерирует исключение и будет бездействовать, пока не запланировано следующее задание, чего я и ожидаю, даже когда использую ловушки.Это ошибка?Я искал проблемы с github, но не смог найти ту же проблему.Как отладить такую проблему?
Django 1.11.16 сельдерея 4.2.1