O Celery é uma fila de tarefas assíncrona de trabalho, implementada em python, com base na passagem de mensagens distribuídas. Está focado na operação em tempo real, mas também oferece suporte ao agendamento. Aqui será tratado sobre essas filas, utilizando o Redis como broker. Já o agendamento será tratado em outro post.

Por qual motivo o Celery?

O celery tem uma sequência de vantagens e facilidades para a sua implantação, que facilitam o trabalho do desenvolvedor e ainda proporciona escalabilidade para sistemas. A seguir estão os pontos positivos de utilizá-lo.

 

  • O celery é utilizado em sistemas em produção para processar milhões de tarefas por dia;
  • Simples instalação e adaptação em aplicações;
  • Suporta vários tipos de Brokers: RabbitMQ, Redis, Amazon SQS, Zookeeper. Como dito antes, nesta aplicação iremos utilizar o Redis;
  • Fácil para integrar com aplicações Web utilizando Pacotes de Integração;
  • Grandes sistemas e aplicações utilizando: Mozzila, Instagram, AdRoll, entre outros.

Setup da Aplicação

Para instalar os pacotes em python, iremos utilizar o virtual env e o gerenciador de pacotes do python. Então antes de o instalar, vamos configurar o ambiente com estas ferramentas.

Instalando e Configurando o Virtualenv

O virtualenv pode ser instalado através do gerenciador de pacotes do python, o pip. Assim, primeiramente iremos instalar em seu sistema operacional. Irei apresentar um exemplo de instalação em derivados do Debian. Mais informações sobre a instalação do pip podem ser encontradas no Site Oficial do pip.

 

Com o gerenciador de pacotes instalado, é possível instalar o virtual env.

 

Agora podemos criar ambientes virtuais, que irá instalar os pacotes em uma pasta e não no sistema por inteiro. Assim, vamos criar uma pasta para o desenvolvimento, o nosso virtualenv e o ativá-lo.

Desta forma, com o ambiente virtual instalado e ativado, todos os pacotes instalados pelo pip serão alocados dentro da pasta .env/libs.

Instalando o Celery

Após ativado o virtualenv, é muito simples instalar o Celery.

Instalando Redis

A instalação do Redis para outros sistemas operacionais pode ser conferida no site oficial do Redis. Porém, para a maioria dos casos, a instalação básica a seguir será feita corretamente.

Redis Server

Após estes procedimentos, basta apenas iniciar o Redis.

 

Criando a primeira Task

As tasks do celery podem ser invocadas e enfileiradas. Para iniciar, o primeiro passo é criar um módulo que será decorado pelo celery como uma de suas tasks.

Vamos criar o arquivo a seguir com o seguinte código:

Logo após, é criada a instância do celery, passando o nome do worker(‘tasks’) e a url em que o broker atende, que no caso é: redis://localhost:6379/0.

Logo em seguida é criado um método que simula a distância em que um corredor está. O método recebe o nome do corredor e a sua velocidade. E a cada um segundo imprime o nome do corredor e quantos metros este já percorreu.

O interessante deste método é verificar que ao ser chamado várias vezes, será possível visualizar os corredores em suas posições atuais, representado as filas em execução.

Então, vamos ao teste. Para tal, vamos iniciar o worker com o nome da instância do celery que criamos no código: tasks.

Pronto, o servidor do celery está funcionando e aguardando a solicitações de novas filas.

Para orquestrar as requisições, abra uma nova aba do terminal em sua máquina, ative o virtual env nessa nova máquina e inicie um terminal interativo do python.

 

Agora devemos importar o módulo tasks e assim poderemos utilizar o método. Vamos utilizar três corredores com suas velocidades, em metros, diferentes.

  • Tiago Assunção com velocidade de 3m;
  • Leonardo Bites com velocidade de 4m;
  • Silvia Mendes com velocidade de 5m.

E a cada um segundo será apresentado na saída do worker do Celery a posição de cada um deles.

Assim, na saída do worker é possível verificar os resultados do worker.

Conclusão

O celery é uma ótima ferramenta para a paralelização de atividades, que tem um grande suporte para escalabilidade.

Este tutorial explica apenas o começo do potencial desta ferramenta. Pois ela possui suporte para criar várias filas simultâneas com diferentes tasks. É possível limitar o número máximo de concorrência do worker. O celery cede suporte para cancelar as tasks programaticamente e possui um sistema de agendamento bastante completo. Todos estes pontos são assuntos de outros posts que virão.

Caso não deseje esperar os próximos posts, mas deseja saber mais sobre esta poderosa ferramenta, acesse a documentação oficial no próprio site do Celery.