Чтобы пометить задачу как невыполненную, не вызывая исключение, измените состояние задачи на FAILURE
, а затем вызовите исключение Ignore
, поскольку при возвращении любого значения задание будет считаться успешным, например:
from celery import Celery, states
from celery.exceptions import Ignore
app = Celery('tasks', broker='amqp://guest@localhost//')
@app.task(bind=True)
def run_simulation(self):
if some_condition:
# manually update the task state
self.update_state(
state = states.FAILURE,
meta = 'REASON FOR FAILURE'
)
# ignore the task so no other state is recorded
raise Ignore()
Но лучший способ - вызвать исключение из вашей задачи, вы можете создать собственное исключение для отслеживания этих сбоев:
class TaskFailure(Exception):
pass
И поднимите это исключение из вашей задачи:
if some_condition:
raise TaskFailure('Failure reason')