Fluxo estilo if-else com Celery Tasks


Às vezes nós precisamos conectar tarefas de acordo com o resultado delas, de modo similar a um fluxo estilo if/else. Com Celery é possível fazer isso usando link e link_error.

Para te dar uma ideia, digamos que nós precisamos enviar uma mensagem de texto para nosso cliente. Se for enviada com sucesso, essa mensagem deve ser sincronizada com o nosso CRM; se der errado, devemos entrar em contato com o nosso setor de TI imediatamente.

Nós podemos resolver esse problema conectando a nossa send_sms a outras tarefas. Nós usamos link para tarefas que devem ser executadas logo em seguida e link_error para tarefas que só serão executadas se a tarefa principal falhar.

send_sms.apply_async(
  args=[body, customer.phone_number],
  link=sync_sms_to_crm.si(customer.pk, message),
  link_error=send_email_to_it.si(customer.pk, message)
)

Você pode combinar o linking das tarefas com outras estruturas de workflow do Celery fazendo com seus workflows fiquem mais consistente escrevendo menos código.

Translations


comments powered by Disqus