O Guia do Python de Aipo: Fundamentos, Exemplos e Dicas Úteis

Vadym Zakovinko Seg. 23 de jul · 7 min ler

Todos na comunidade Python já ouviram falar do Celery pelo menos uma vez, e talvez até já tenham trabalhado com ele. Basicamente, é uma ferramenta útil que ajuda a executar código adiado ou dedicado em um processo separado ou até mesmo em um computador ou servidor separado. Isso economiza tempo e esforço em muitos níveis.

Este guia de Python de aipo é publicado originalmente no blog do Django Stars .

Uma Introdução ao Guia do Python de Aipo

O aipo diminui a carga de desempenho executando parte da funcionalidade como tarefas adiadas no mesmo servidor que outras tarefas ou em um servidor diferente. Mais comumente, os desenvolvedores usam para enviar e-mails. No entanto, o aipo tem muito mais a oferecer. Neste artigo, mostrarei alguns conceitos básicos sobre o aipo, bem como algumas práticas recomendadas do Python-Celery.

Noções básicas de aipo

Se você já trabalhou com o Celery, fique à vontade para pular este capítulo. Mas se o Aipo é novidade para você, aqui você aprenderá a ativar o Aipo em seu projeto e a participar de um tutorial separado sobre o uso do Aipo com o Django. Basicamente, você precisa criar uma instância do Celery e usá-la para marcar as funções do Python como tarefas.

É melhor criar a instância em um arquivo separado, pois será necessário executar o Celery da mesma forma que funciona com o WSGI no Django. Por exemplo, se você criar duas instâncias, Flask e Celery, em um arquivo em um aplicativo Flask e executá-lo, terá duas instâncias, mas usará apenas uma. É o mesmo quando você corre aipo.

Exemplos de Aipo Primários em Python

Como eu mencionei antes, o caso de usar o Celery é enviar e-mail. Usarei este exemplo para mostrar os fundamentos do uso do Celery. Aqui está um rápido tutorial do Celery Python:

Este código usa o Django, como é o nosso principal framework para aplicações web. Ao usar o Celery, reduzimos o tempo de resposta ao cliente, pois separamos o processo de envio do código principal responsável por retornar a resposta.

A maneira mais simples de executar essa tarefa é chamar o método de delay da função fornecida pelo decorador app.task .

Não só isso – o aipo fornece mais benefícios. Por exemplo, poderíamos configurar novas tentativas em caso de falha.

Agora a tarefa será reiniciada após dez minutos se o envio falhar. Além disso, você poderá definir o número de novas tentativas.

Alguns de vocês podem se perguntar por que eu mudei a renderização do template para fora da send_mail call . É porque encapsulamos a chamada de send_mail em try/except , e é melhor ter um código tão pequeno em try/except quanto possível.

Aipo para usuários avançados

Tarefas Agendadas do Django de Aipo

O aipo torna possível executar tarefas por agendadores como o crontab no Linux.

Primeiro de tudo, se você quiser usar tarefas periódicas, você tem que executar o trabalhador Celery com o sinalizador –beat, caso contrário, o aipo irá ignorar o agendador. Seu próximo passo seria criar uma configuração que diga qual tarefa deve ser executada e quando. Aqui está um exemplo:

* Se você não usa Django, você deve usar celery_app.conf.beat_schedule vez de CELERY_BEAT_SCHEDULE

O que temos nessa configuração é apenas uma tarefa que será executada toda segunda-feira às 7 da manhã. A chave raiz é um nome ou um cronjob, não uma tarefa.

Você pode adicionar argumentos às tarefas e escolher o que deve ser feito caso a mesma tarefa seja executada em momentos diferentes com argumentos diferentes. O método crontab suporta a sintaxe do crontab do sistema – como crontab(minute='*/15') – para executar a tarefa a cada 15 minutos.

Execução de Tarefa Adiada em Aipo

Você também pode definir tarefas em uma fila do Python Celery com um tempo limite antes da execução. (Por exemplo, quando você precisa enviar uma notificação após uma ação.) Para fazer isso, use o apply_async method com um argumento eta ou countdown .

Vamos ver como isso pode parecer no código:

No primeiro exemplo, o email será enviado em 15 minutos, enquanto no segundo será enviado às 7 horas do dia 20 de maio.

Configurando Filas de Aipo do Python

O aipo pode ser distribuído quando você tem vários funcionários em diferentes servidores que usam uma fila de mensagens para o planejamento de tarefas. Você pode configurar uma fila adicional para sua tarefa / trabalhador. Por exemplo, enviar e-mails é uma parte crítica do seu sistema e você não quer que outras tarefas afetem o envio. Em seguida, você pode adicionar uma nova fila, vamos chamá-la de mailmail e usar essa fila para enviar e-mails.

* se você não usa o Django, use celery_app.conf.task_routes vez de CELERY_TASK_ROUTES

Execute dois trabalhadores de aipo separados para a fila padrão e a nova fila:

A primeira linha executará o trabalhador para a fila padrão chamada celery e a segunda linha executará o trabalhador para a fila de mail . Você pode usar o primeiro worker sem o argumento -Q , então este worker usará todas as filas configuradas.

Tarefas de longa duração do Python Celery

Às vezes, tenho que lidar com tarefas escritas para passar por registros de banco de dados e executar algumas operações. Muitas vezes, os desenvolvedores esquecem o crescimento de dados, o que pode levar a uma tarefa muito longa. É sempre melhor escrever tarefas como essas de uma maneira que permita trabalhar com blocos de dados. A maneira mais fácil é adicionar parâmetros de deslocamento e limite a uma tarefa. Isso permitirá que você indique o tamanho do bloco e o cursor para obter um novo bloco de dados.

Este é um exemplo muito simples de como uma tarefa como essa pode ser implementada. No final da tarefa, verificamos quantos usuários encontramos no banco de dados. Se o número for igual ao limite, provavelmente teremos novos usuários para processar. Então, nós executamos a tarefa novamente, com um novo deslocamento. Se a contagem de usuários for menor que o limite, significa que é o último pedaço e não precisamos continuar. Cuidado, porém: esta implementação de tarefas precisa ter sempre a mesma ordem de registros.

Você pode gostar:

Configurando as Configurações do Django: Melhores Práticas

Este artigo é destinado a engenheiros que usam o framework Django. Ele dá uma visão profunda sobre a configuração do Django…

djangostars.com