Celery é uma implementação de fila de tarefas para aplicações web Python utilizadas para executar de forma assíncrona trabalhos fora do ciclo de resposta a solicitações HTTP.
Por que o Celery é útil?
Task queues and the Celery implementation in particularare one of the trickier parts of a Python application stack tounderstand.
Se você é um desenvolvedor júnior, pode não ficar claro por que mover os exercícios para fora do ciclo de resposta a solicitações HTTP é importante. Em resumo, você quer que seu servidor WSGI responda às solicitações recebidas o mais rápido possível, porque cada solicitação amarra um processo de trabalhador até que a resposta seja finalizada. Deslocar o trabalho desses trabalhadores girando as tarefas assíncronas em uma fila é uma maneira direta de melhorar os tempos de resposta do servidor WSGI.
Qual a diferença entre Celeryd e Celerybeat?
Celery pode ser usado para executar trabalhos em lote em segundo plano na programação aregular. Um conceito chave em Celery é a diferença entre o daemon Celery (celeryd), que executa tarefas, Celerybeat, que é ascheduler. Pense no Celeryd como um conjunto de visão de túnel de um ou mais trabalhadores que executam as tarefas que você coloca na frente deles. Cada operário irá executar uma tarefa e quando a tarefa for concluída, irá pegar a próxima. O ciclo irá se repetir continuamente, só esperando ociosamente quando não houver moretasks para colocar na frente deles.
Celerybeat, por outro lado, é como um chefe que mantém o registro de quando as tarefas devem ser executadas. Sua aplicação pode dizer ao Celerybeat para executar uma tarefa em intervalos de tempo, como a cada 5 segundos ou uma vez por semana. O canal Celerybeat também pode ser instruído a executar tarefas em uma data ou hora específica, como 5:03pm todo domingo. Quando o intervalo ou hora específica é atingido, o canal Celerybeat envia o trabalho para Celeryd para executar no próximo trabalhador disponível.
Tutoriais e conselhos sobre Celery
Celery é uma ferramenta poderosa que pode ser difícil de envolver a sua mente primeiro. Certifique-se de ler os conceitos da fila de tarefas e mergulhar nestes tutoriais específicos de Celery.
-
A 4 Minutos A Introdução ao Celery é um pequeno screencast introdutório da fila de tarefas.
-
Esta série de posts no blog sobre a arquitetura do Celery,Celery in the wild: dicas e truques para executar tarefas assimétricas no mundo real e lidar com tarefas que consomem recursos no Celeryprovide grande contexto para como o Celery funciona e como lidar com algumas das partes mais estritas para trabalhar com a fila de tarefas.
-
Como usar o Celery com o RabbitMQ é uma caminhada detalhada para usar essas ferramentas em um Ubuntu VPS.
-
Celery – Best Practicesexplica coisas que você não deve fazer com o Celery e mostra algumas características subutilizadas para facilitar o trabalho com as filas de tarefas.
-
Celery Best Practicesis um seguimento diferente do autor acima que se baseia em alguns dos seus próprios aprendizados de mais de 3 anos usando o aipo.
-
Problemas Comuns Usando o Aipo (E Outras Filas de Tarefas)contém bons conselhos sobre erros a evitar nas suas configurações de tarefas, tais como o uso de transações de banco de dados e tentativas de novas tarefas falhadas.
-
Processamento Assíncrono em Aplicações Web Parte Um e Parte Dois são boas leituras para entender a diferença entre uma fila de tarefas e porque você não deve usar seu banco de dados como um.
-
Minhas Experiências com um Microprocessador Baseado em Aipo de Longa Duração dá algumas boas dicas e conselhos baseados na experiência com trabalhadores de Aipo – que levam muito tempo para completar seus trabalhos.
-
Checklist to build great Celery async tasks is a site specifically designed to give you a list of good practices tofollow as you design your task queue configuration and deploy todo-o-desenvolvimento, encenação e ambientes de produção.
-
Heroku escreveu sobre como tosecure Celery quando as tarefas são enviadas por redes não criptografadas.
-
Unit testing Celery tasksexplains três estratégias para testar o código dentro das funções que o Celeryexecute. O post conclui que chamar tarefas de Celery de forma sincronizada para testá-las é a melhor estratégia sem nenhuma desvantagem. No entanto, tenha em mente que qualquer método de teste que não seja o mesmo que a execução da função em um ambiente de produção pode potencialmente levar a bugs negligenciados. Há também um repositório Git de código aberto com todo o código fonte do post.
-
Rollbar monitoring of Celery in a Django appexplains how to use Rollbar to monitor tasks. Superuseful quando trabalhadores invariavelmente morrem sem razão aparente.
-
3 Gotchas for Working with Celeryare things to keep in mind when you’re new to the Celery task queueimplementation.
-
Dask and Celerycompares Dask.distributed with Celery for Python projects. Os exemplos pós-descodificação para mostrar como executar tarefas com qualquer fila de tarefas.
-
Python+Celery: Encadeamento de trabalhos?explica que as tarefas de Celery devem ser dependentes umas das outras usandoCelery chains, não dependências diretas entre tarefas.
Celery com frameworks web
Celery é tipicamente usado com um framework web comoDjango, Flask ou Pyramid.Estes recursos mostram como integrar a fila de tarefas do Celery com o frameworkweb de sua escolha.
-
Como usar o Celery e RabbitMQ com o Djangois um ótimo tutorial que mostra como instalar e configurar uma tarefa básica com o Django.
-
Miguel Grinberg escreveu um bom post sobre como usar o Celery da fila de tarefas com o Flask. Ele dá uma visão geral do Celery seguido por um código específico para configurar a fila de tarefas e integrá-la com o Flask.
-
Configurando uma fila de tarefas assíncrona para Django usando Celery e Redisisis um tutorial simples para configurar a fila de tarefas Celery para aplicações web Django usando o corretor Redis no back end.
-
Um guia para o envio de relatórios agendados via e-mail usando Django e Celeryshows você pode usarjango-celery na sua aplicação. Note no entanto que existem outras formas de integrarCelery com o Django que não requerem a dependência django-celery.
-
Flask tarefas de fundo assíncronas com Celery e Rediscombines Celery com Redis como corretor eFlask para o framework da aplicação exemplo.
-
Celery e Django e Docker: Oh My!mostra como criar tarefas de Celery para o Django dentro de um Dockercontainer. Também fornece algumas
-
Tarefas Assíncronas com Django e Celeryshows como integrar o Aipo com Django e criar Tarefas Periódicas.
-
Agregar Tarefas com Celery é um passo detalhado para configurar o Aipo com Django (embora o Celery também possa ser usado sem problemas com outros frameworks).
-
Introdução de Celery para Python+Djangoproporciona uma introdução à fila de tarefas de Celery com Django como framework intencional para construir uma aplicação web.
-
Tarefas assíncronas com Falcon e Celeryconfigures Celery com o framework Falcon, que não é comumente usado em tutoriais web.
-
Custom Celery task states é um post avançado na criação de estados personalizados, que é especialmente útil para estados transientes em sua aplicação que não são cobertos pela configuração default do Celery.
-
Tarefas assíncronas com Django e Celerylooks sobre como configurar o Celery para lidar com tarefas de longa duração em um aplicativo Django.
Recursos de implantação do Celery
Celery e seu corretor rodam separadamente de seus servidores web e WSGI, de modo que ele adicione alguma complexidade adicional às suas implantações. Os seguintes recursos o guiam através de como lidar com as implantações e obter as configurações de configuração no lugar.
-
A série “Django in Production” da Rob Golding contém um post específico sobre Tarefas de Fundo.
-
Como rodar o aipo como um daemon?é um post curto com o código mínimo para rodar o daemon Celery e oCelerybeat como serviços de sistema no Linux.
-
Celery in Productionon the Caktus Group blog contém boas práticas de utilização do Celery com o RabbitMQ, ferramentas de monitoramento e outros aspectos que não são frequentemente discutidos na documentação existente.
-
Três dicas rápidas de dois anos com o Celeryprovide alguns conselhos sólidos sobre atrasos de tentativas, a bandeira
-Ofair
e timeouts de tarefas globais para o Celery.