Agendamento de Tarefas Multithread Assíncronas no Django com Celery

Django
|
Agendamento de Tarefas Multithread Assíncronas no Django com Celery


Gerenciar tarefas em um aplicativo da web pode se tornar complexo, especialmente quando você precisa executar operações demoradas de forma assíncrona. Django, um framework da web popular, pode ser estendido com Celery para lidar com tarefas assíncronas de forma eficiente. Nesta postagem do blog, exploraremos como configurar o agendamento periódico de tarefas com Celery em um aplicativo Django. Isso permite que seu aplicativo execute tarefas em segundo plano em intervalos especificados e descarregue o processamento de tarefas dos principais threads do aplicativo.

1. Instale o Celery e o Django Celery Beat

A jornada começa com a instalação do Celery e do django-celery-beat. Esses são componentes essenciais para agendamento e execução de tarefas no Django. Você pode instalá-los usando pip:

    pip install celery django-celery-beat
2. Configurar o Celery

Após instalar o Celery, você precisa configurá-lo para funcionar com seu aplicativo Django. Comece criando um arquivo chamado celery.py no diretório principal do seu projeto. Este arquivo inicializará o Celery e o vinculará às configurações do Django.

    from celery import Celery
    import os

    # Set the default Django settings module for the 'celery' program.
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings')

    app = Celery('your_project_name')

    # Using a string here means the worker will not have to serialize
    # the configuration object to child processes.
    app.config_from_object('django.conf:settings', namespace='CELERY')

    # Load task modules from all registered Django apps.
    app.autodiscover_tasks()

Para garantir que esta configuração seja carregada quando o Django for iniciado, importe seu aplicativo Celery no your_project_name/__init__.py arquivo:

    from .celery import app as celery_app

    __all__ = ('celery_app',)
3. Atualizar as configurações do Django

Em seguida, integre o Celery com suas configurações do Django atualizando o settings.py arquivo. Isso inclui especificar seu broker e backend de resultado, que pode ser RabbitMQ ou Redis.

    CELERY_BROKER_URL = 'redis://localhost:6379/0'  # or 'amqp://localhost//' for RabbitMQ
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    CELERY_TIMEZONE = 'UTC'

    from celery.schedules import crontab

    CELERY_BEAT_SCHEDULE = {
        'task-name': {
            'task': 'myapp.tasks.task_function',
            'schedule': crontab(minute=0, hour=0),  # Executes daily at midnight
        },
    }
4. Defina sua tarefa

Agora, é hora de definir quais devem ser suas tarefas. Crie uma tasks.py arquivo em seu aplicativo Django (por exemplo, myapp ) e adicione sua função de tarefa.

    from celery import shared_task

    @shared_task
    def task_function():
        # Logic for your asynchronous, multithreaded task
        print("Task is executing")

Aqui, @tarefa_compartilhada é um decorador fornecido pelo Celery que marca a função como uma tarefa invocável.

5. Execute Celery Worker e vença

Por fim, você precisa executar o Celery worker e beat para começar a processar as tarefas e agendá-las de acordo com sua configuração.

    # Start Celery Worker
    celery -A your_project_name worker -l info

    # Start Celery Beat
    celery -A your_project_name beat -l info

Esses comandos iniciam o worker para processar tarefas assíncronas e o beat process para gerenciar tarefas periódicas. Certifique-se de que seu message broker como Redis ou RabbitMQ esteja em execução antes de executar esses comandos.

Seguindo essas etapas, você equipou seu aplicativo Django para lidar eficientemente com tarefas assíncronas periódicas, melhorando o desempenho e a capacidade de resposta do seu aplicativo. O Celery é uma ferramenta poderosa e, com essa configuração, você está pronto para explorar ideias de processamento de tarefas mais complexas.




Aviso de Repostagem: Este conteúdo é protegido por direitos autorais e todos os direitos estão reservados pelo autor. Você é bem-vindo para republicar ou compartilhar esta página, mas, por favor, assegure-se de fornecer um crédito claro à fonte original com um hiperlink de volta para esta página. Obrigado por respeitar o nosso conteúdo!

Este artigo foi útil?
196 de 196 acharam isto útil
avatar
John Tanner
Fundador

Sou um desenvolvedor de software altamente qualificado com mais de 20 anos de experiência em desenvolvimento full-stack multiplataforma. Especializo-me em projetar e gerir arquiteturas de projetos em larga escala e simplificar sistemas complexos. A minha experiência estende-se a desenvolvimentos em Python, Rust e Django. Tenho uma profunda proficiência em tecnologias blockchain, inteligência artificial, sistemas de alta concorrência, extração de dados de apps e web, desenvolvimento de APIs, otimização de bases de dados, conteinerização de projetos e implementação em ambientes de produção.

Contacto John Tanner