Я видел этот вопрос, на который не получил ответа: Передача параметров в задачу Celery on_error
Мой первый вопрос: какова сигнатура обработчика ошибок, которую мы можем передать задаче Celery, используя on_error(...)
или apply(..., link_error=...)
.
По ссылке выше (передать Передать параметры в задачу Celery on_error , их on_error
имеет подпись:
multiple.on_failure(exc, task_id, args, kwargs, einfo)
В эта ссылка из документов о Canvas , подпись:
@app.task
def log_error(request, exc, traceback):
with open(os.path.join('/var/errors', request.id), 'a') as fh:
print('--\n\n{0} {1} {2}'.format(task_id, exc, traceback), file=fh)
В этой другой ссылке из документов: Calling Tasks , подпись:
@app.task
def error_handler(uuid):
result = AsyncResult(uuid)
exc = result.get(propagate=False)
print('Task {0} raised exception: {1!r}\n{2!r}'.format(uuid, exc, result.traceback))
В моей собственной кодовой базе я вижу людей, использующих:
def handle_error(*args, **kwargs):
Кроме того, можете ли вы установить точку останова, используя rdb
внутри обработчика on_error
? Также почему обработчик должен быть @task
?