Tarefas demoradas de forma assíncrona com
Django e Celery
@ffreitasalves
Intro (O Problema)
1. Rápido >>> Lento
2. Tarefas demoradas -> Timeout
3. Dependência de fatores externos (API de terceiros, resposta do SO, etc)
Exemplos de problemas
1. Gerar um relatório/documento demorado
2. Enviar muitos emails
3. Editar um vídeo online
Caso Real
Nããããããããããããão
Apresentando o Celery
1. Task Queue Assíncrona
2. Agenda tarefas
3. Integração com Django, flask, tornado, etc.
Mão na Massa
Instalar o RabbitMQ1. Instalar do site ou com APT-GET
a. sudo rabbitmqctl add_user myuser mypasswordb. sudo rabbitmqctl add_vhost myvhostc. sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"
Instalar e configurar o Celery
pip install celerysettings.py:
Instalar e configurar o Celery
na pasta do projeto__init__.py:
Instalar e configurar o Celery
na pasta do projetocelery.py:
Criando a task assíncrona
Na pasta do APPtasks.py
Agora é só chamar a Task
views.py
Rodar o Celerycelery --app=nomeprj worker --loglevel=INFO
Se quiser, só chamar a função
Em produção, use o supervisor
1. sudo apt-get install supervisor2. criar um arquivo de configuração pro celery e com um link simbólico no
/etc/supervisor/conf.d/[program:celery]command=/home/deploy/.virtualenvs/virtual_legal/bin/celery --app=nomeprj worker --loglevel=INFOdirectory=/home/deploy/webapps/pasta_projetouser=nobodyautostart=trueautorestart=trueredirect_stderr=true
Reiniciar o supervisor
1. supervisorctl reread
2. supervisorctl update
3. supervisorctl start celery