Tenho lido o documento e pesquisado, mas não consigo encontrar uma resposta direta:
Você pode cancelar uma tarefa já em execução? (como na tarefa foi iniciada, demora um pouco e precisa ser cancelada no meio)
Eu encontrei isso no documento no FAQ do Celery
>>> result = add.apply_async(args=[2, 2], countdown=120)
>>> result.revoke()
Mas não estou certo se isso irá cancelar tarefas enfileiradas ou se irá interromper um processo em execução em um trabalhador. Obrigado por qualquer luz que você possa lançar!
fonte
No Celery 3.1, a API de revogação de tarefas foi alterada.
De acordo com o FAQ de aipo , você deve usar result.revoke:
ou se você tiver apenas o ID da tarefa:
fonte
A resposta de @ 0x00mh está correta, no entanto documentos recentes sobre aipo dizem que usar a
terminate
opção é " um último recurso para administradores " porque você pode encerrar acidentalmente outra tarefa que começou a ser executada nesse meio tempo. Possivelmente, uma solução melhor é combinarterminate=True
comsignal='SIGUSR1'
(o que faz com que a exceção SoftTimeLimitExceeded seja gerada na tarefa).fonte
SoftTimeLimitExceeded
é gerado em minha tarefa, minha lógica de limpeza personalizada (implementada viatry
/except
/finally
) é chamada. Isso é muito melhor, na minha opinião, do que o queAbortableTask
oferece ( docs.celeryproject.org/en/latest/reference/… ). Com o último, você precisa de um back - end de resultado do banco de dados e tem que verificar manual e repetidamente o status de uma tarefa em andamento para ver se ela foi abortada.worker_prefetch_multiplier = 1
desde que tenho apenas algumas tarefas de longa execução, o encerramento deve funcionar - já que nenhuma outra tarefa será efetuada pelo encerramento - entendi corretamente? @spicyramenVeja as seguintes opções para tarefas: time_limit , soft_time_limit (ou você pode defini-lo para trabalhadores). Se você deseja controlar não apenas o tempo de execução, consulte o argumento expires do método apply_async.
fonte
Além disso, insatisfatório, existe outra forma (abortar tarefa) de interromper a tarefa, mas existem muitos insegurança, mais detalhes, consulte: http://docs.celeryproject.org/en/latest/reference/celery.contrib.abortable .html
fonte