tarefas demoradas de forma assíncrona com django e celery

18
Tarefas demoradas de forma assíncrona com Django e Celery @ffreitasalves

Upload: fernando-freitas-alves

Post on 16-Aug-2015

535 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Tarefas demoradas de forma assíncrona com django e celery

Tarefas demoradas de forma assíncrona com

Django e Celery

@ffreitasalves

Page 2: Tarefas demoradas de forma assíncrona com django e celery

Intro (O Problema)

1. Rápido >>> Lento

2. Tarefas demoradas -> Timeout

3. Dependência de fatores externos (API de terceiros, resposta do SO, etc)

Page 3: Tarefas demoradas de forma assíncrona com django e celery

Exemplos de problemas

1. Gerar um relatório/documento demorado

2. Enviar muitos emails

3. Editar um vídeo online

Page 4: Tarefas demoradas de forma assíncrona com django e celery

Caso Real

Page 5: Tarefas demoradas de forma assíncrona com django e celery

Nããããããããããããão

Page 6: Tarefas demoradas de forma assíncrona com django e celery

Apresentando o Celery

1. Task Queue Assíncrona

2. Agenda tarefas

3. Integração com Django, flask, tornado, etc.

Page 7: Tarefas demoradas de forma assíncrona com django e celery
Page 8: Tarefas demoradas de forma assíncrona com django e celery

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 ".*" ".*" ".*"

Page 9: Tarefas demoradas de forma assíncrona com django e celery

Instalar e configurar o Celery

pip install celerysettings.py:

Page 10: Tarefas demoradas de forma assíncrona com django e celery

Instalar e configurar o Celery

na pasta do projeto__init__.py:

Page 11: Tarefas demoradas de forma assíncrona com django e celery

Instalar e configurar o Celery

na pasta do projetocelery.py:

Page 12: Tarefas demoradas de forma assíncrona com django e celery

Criando a task assíncrona

Na pasta do APPtasks.py

Page 13: Tarefas demoradas de forma assíncrona com django e celery

Agora é só chamar a Task

views.py

Page 14: Tarefas demoradas de forma assíncrona com django e celery

Rodar o Celerycelery --app=nomeprj worker --loglevel=INFO

Page 15: Tarefas demoradas de forma assíncrona com django e celery

Se quiser, só chamar a função

Page 16: Tarefas demoradas de forma assíncrona com django e celery

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

Page 17: Tarefas demoradas de forma assíncrona com django e celery

Reiniciar o supervisor

1. supervisorctl reread

2. supervisorctl update

3. supervisorctl start celery

Page 18: Tarefas demoradas de forma assíncrona com django e celery

Obrigado!

Fernando Freitas Alves (@ffreitasalves)

[email protected]://fernandofreitasalves.com