TAREFAS ASSÍNCRONAS COM
DJANGO E CELERY
Allisson Azevedo
Monday, June 10, 13
ALLISSON AZEVEDO
Graduado em Licenciatura em Computação
Desenvolvedor Web
http://speakerdeck.com/allisson
http://slideshare.net/allisson
http://github.com/allisson
http://youtube.com/user/allissonazevedo
Monday, June 10, 13
Monday, June 10, 13
Monday, June 10, 13
PORQUE EU PRECISO DE UM
TASK/JOB QUEUE?
Necessidade de processar uma tarefa fora do ciclo de
requisição e reposta
Processamento de vídeo/imagens
Envio de e-mails
Geração de relatórios complexos
Comunicação com API’s externas (twitter, facebook)
Monday, June 10, 13
PORQUE EU PRECISO DE UM
TASK/JOB QUEUE?
Agendar tarefas (substituir o cron)
Trabalhar com indexação de um search engine
Monday, June 10, 13
COMO FUNCIONA?
Client
Quem gera a tarefa
Message Broker
Gerencia a fila de tarefas
Worker
Recebe as tarefas do Broker e executa as mesmas
Monday, June 10, 13
COMO FUNCIONA?
Result Store
Onde são guardados os resultados das tarefas
Monday, June 10, 13
CELERY
“Distributed Task Queue”
Escrito em python
Integração com os principais frameworks python
(django, pyramid, flask, web2py, tornado)
Broker Backends (rabbitmq, redis, sqlalchemy, django,
mongodb)
Result Store Backends (Redis, memcached, MongoDB)
Monday, June 10, 13
QUAL BROKER USAR?
RabbitMQ (http://stackoverflow.com/a/9176046)
Redis
Não use o broker como result store
Monday, June 10, 13
INTEGRANDO COM O
DJANGO
pip install django-celery
Adicione o djcelery no INSTALLED_APPS
Adicione as linhas no settings.py
import djcelery
djcelery.setup_loader()
Monday, June 10, 13
INTEGRANDO COM O
DJANGO
Selecione o broker
BROKER_URL = 'redis://localhost:6379/0' #Redis
Inicie o worker
python manage.py celery worker --loglevel=info
Monday, June 10, 13
INTEGRANDO COM O
DJANGO
Em seus projetos, crie um arquivo chamado tasks.py
Monday, June 10, 13
INTEGRANDO COM O
DJANGO
from celery import task
@task()
def add(x, y):
return x + y
Monday, June 10, 13
INTEGRANDO COM O
DJANGO
Rode a task
Monday, June 10, 13
INTEGRANDO COM O
DJANGO
>>> from celerytest.tasks import add
>>> add.delay(2, 2)
>>> add.apply_async((2, 2))
Monday, June 10, 13
MÃO NA MASSA!
https://github.com/allisson/django-social-monitor-
example
Monday, June 10, 13
Monday, June 10, 13
OBRIGADO!
Monday, June 10, 13

Tarefas Assíncronas com Django e Celery