$30 off During Our Annual Pro Sale. View Details »

Tarefas assíncronas com django e celery

Tarefas assíncronas com django e celery

Slides da palestra no mutirão python: https://plus.google.com/events/c4a18aljra59dqf56t1lac89o4k

Allisson Azevedo

June 11, 2013
Tweet

More Decks by Allisson Azevedo

Other Decks in Programming

Transcript

  1. TAREFAS ASSÍNCRONAS COM
    DJANGO E CELERY
    Allisson Azevedo
    Monday, June 10, 13

    View Slide

  2. 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

    View Slide

  3. Monday, June 10, 13

    View Slide

  4. Monday, June 10, 13

    View Slide

  5. 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

    View Slide

  6. 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

    View Slide

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

    View Slide

  8. COMO FUNCIONA?
    Result Store
    Onde são guardados os resultados das tarefas
    Monday, June 10, 13

    View Slide

  9. 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

    View Slide

  10. QUAL BROKER USAR?
    RabbitMQ (http://stackoverflow.com/a/9176046)
    Redis
    Não use o broker como result store
    Monday, June 10, 13

    View Slide

  11. 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

    View Slide

  12. 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

    View Slide

  13. INTEGRANDO COM O
    DJANGO
    Em seus projetos, crie um arquivo chamado tasks.py
    Monday, June 10, 13

    View Slide

  14. INTEGRANDO COM O
    DJANGO
    from celery import task
    @task()
    def add(x, y):
    return x + y
    Monday, June 10, 13

    View Slide

  15. INTEGRANDO COM O
    DJANGO
    Rode a task
    Monday, June 10, 13

    View Slide

  16. INTEGRANDO COM O
    DJANGO
    >>> from celerytest.tasks import add
    >>> add.delay(2, 2)
    >>> add.apply_async((2, 2))
    Monday, June 10, 13

    View Slide

  17. MÃO NA MASSA!
    https://github.com/allisson/django-social-monitor-
    example
    Monday, June 10, 13

    View Slide

  18. Monday, June 10, 13

    View Slide

  19. OBRIGADO!
    Monday, June 10, 13

    View Slide