Apio detener la ejecución de una cadena.

Tengo una tarea check_orders que se ejecuta periódicamente. Hace un grupo de tareas para que pueda medir el tiempo de ejecución de las tareas, y realizar algo cuando están terminadas (este es el propósito de res.join [1] y grouped_subs) Las tareas que se agrupan son pares de Tareas encadenadas.

Lo que quiero es para cuando la primera tarea no cumpla con una condición (falla) no ejecute la segunda tarea en la cadena. No puedo entender esto por mi vida y siento que esta es una funcionalidad bastante básica para un administrador de colas de trabajo. Cuando intento las cosas que he comentado después de [2] (generar excepciones, eliminar las devoluciones de llamada) ... nos quedamos atascados en la unión () en check_orders por alguna razón (rompe el grupo). También he intentado establecer ignore_result en False para todas estas tareas, pero aún no funciona.

@task(ignore_result=True)
def check_orders():
    # check all the orders and send out appropriate notifications
    grouped_subs = []

    for thingy in things:
       ...

        grouped_subs.append(chain(is_room_open.subtask((args_sub_1, )), 
                        notify.subtask((args_sub_2, ), immutable=True)))

    res = group(grouped_subs).apply_async()

    res.join()         #[1]
    logger.info('Done checking orders at %s' % current_task.request.id))

@task(ignore_result=True)
def is_room_open(args_sub_1):
    #something time consuming
    if http_req_and_parse(args_sub_1):
        # go on and do the notify task
        return True
    else:
        # [2]
        # STOP THE CHAIN SOMEHOW! Don't execute the rest of the chain, how?
        # None of the following things work:
        # is_room_open.update_state(state='FAILURE')
        # raise celery.exceptions.Ignore()
        # raise Exception('spam', 'eggs')
        # current_task.request.callbacks[:] = []

@task(ignore_result=True)
def notify(args_sub_2):
    # something else time consuming, only do this if the first part of the chain 
    # passed a test (the chained tasks before this were 'successful'
    notify_user(args_sub_2)

Respuestas a la pregunta(3)

Su respuesta a la pregunta