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
John Tanner
FundadorSou 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 TannerPost relacionado:
- Desenvolvendo Aplicações com IA Usando Django
- Como Construir um Website Independente de Sucesso para Comércio Exterior: Um Guia Abrangente desde Pesquisa de Mercado até Otimização SEO
- Serviços de Desenvolvimento Django
- Revelando o Poder do Django: O Framework Backend Definitivo
- Criar um Site Multilíngue com Django: Melhores Práticas e Estratégias de SEO