Pular para o conteúdo
Skillpedia
APIs e servidores (backend)280 mil · #43

django-celery

Ajuda seu agente a configurar e gerenciar tarefas assíncronas em aplicações Django usando Celery. Isso é útil para adicionar trabalhos em segundo plano ou tarefas agendadas.

O que ela faz

Esta ferramenta ajuda a adicionar tarefas que rodam em segundo plano ou em horários específicos para um site feito com Django. Ela permite que seu site continue funcionando rápido enquanto tarefas demoradas, como enviar emails ou gerar relatórios, são feitas sem atrapalhar o usuário.

Quando usar

  • ✓Quando você precisa enviar emails em massa sem travar o site.
  • ✓Para criar tarefas que se repetem, como gerar um relatório todo dia.
  • ✓Para fazer operações demoradas sem que o usuário precise esperar.

Exemplo do que pedir para a IA

“Como faço para meu site enviar um email para todos os usuários cadastrados sem que eles precisem ficar esperando a página carregar?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/django-celery/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/django-celery/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ela usa um sistema chamado Celery para gerenciar essas tarefas. Você define o que a tarefa deve fazer e o Celery cuida de executá-la em outro lugar, sem sobrecarregar o site principal.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill django-celery

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/django-celery/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões de Tarefas Assíncronas com Django + Celery

Padrões de nível de produção para processamento de tarefas em segundo plano no Django usando Celery com Redis ou RabbitMQ.

Quando Ativar

  • Adicionar jobs em segundo plano ou processamento assíncrono a um app Django
  • Implementar tarefas periódicas/agendadas
  • Descarregar operações lentas (e-mail, geração de PDF, chamadas de API) do ciclo de requisição
  • Configurar Celery Beat para agendamento semelhante ao cron
  • Depurar falhas de tarefas, novas tentativas ou filas acumuladas
  • Escrever testes para tarefas Celery

Configuração do Projeto

Instalação

pip install 'celery[redis]' django-celery-results django-celery-beat

celery.py — Ponto de Entrada do App

# config/celery.py
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.development')

app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()  # Discovers tasks.py in each INSTALLED_APP

@app.task(bind=True, ignore_result=True)
def debug_task(self):
    print(f'Request: {self.request!r}')
# config/__init__.py
from .celery import app as celery_app

__all__ = ('celery_app',)

Configurações do Django

# config/settings/base.py

# Broker (Redis recommended for production)
CELERY_BROKER_URL = env('CELERY_BROKER_URL', default='redis://localhost:6379/0')
CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND', default='django-db')

# Serialization
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

# Task behavior
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT = 30 * 60        # Hard limit: 30 min
CELERY_TASK_SOFT_TIME_LIMIT = 25 * 60   # Soft limit: sends SoftTimeLimitExceeded
CELERY_WORKER_PREFETCH_MULTIPLIER = 1   # Prevent worker hoarding long tasks
CELERY_TASK_ACKS_LATE = True            # Re-queue on worker crash

# Result persistence
CELERY_RESULT_EXPIRES = 60 * 60 * 24   # Keep results 24 hours

# Beat scheduler (for periodic tasks)
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'

# Installed apps
INSTALLED_APPS += [
    'django_celery_results',
    'django_celery_beat',
]

Executando Workers

# Start worker (development)
celery -A config worker --loglevel=info

# Start beat scheduler (periodic tasks)
celery -A config beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler

# Combined worker + beat (dev only, never production)
celery -A config worker --beat --loglevel=info

# Production: multiple workers with concurrency
celery -A config worker --loglevel=warning --concurrency=4 -Q default,high_priority

Padrões de Design de Tarefas

Tarefa Básica

# apps/notifications/tasks.py
from celery import shared_task
import logging

logger = logging.getLogger(__name__)

@shared_task(name='notifications.send_welcome_email')
def send_welcome_email(user_id: int) -> None:
    """Send welcome email to newly registered user."""
    from apps.users.models import User
    from apps.notifications.services import EmailService

    try:
        user = User.objects.get(pk=user_id)
    except User.DoesNotExist:
        logger.warning('send_welcome_email: user %s not found', user_id)
        return  # Idempotent — do not raise, task already impossible to complete

    EmailService.send_welcome(user)
    logger.info('Welcome email sent to user %s', user_id)

Tarefa com Nova Tentativa

@shared_task(
    bind=True,
    name='integrations.sync_to_crm',
    max_retries=5,
    default_retry_delay=60,       # seconds before first retry
    autoretry_for=(ConnectionError, TimeoutError),
    retry_backoff=True,           # exponential backoff
    retry_backoff_max=600,        # cap at 10 minutes
    retry_jitter=True,            # randomise to avoid thundering herd
)
def sync_contact_to_crm(self, contact_id: int) -> dict:
    """Sync contact to external CRM with retry on transient failures."""
    from apps.crm.services import CRMClient

    try:
        result = CRMClient().sync(contact_id)
        return result
    except CRMClient.RateLimitError as exc:
        # Specific retry delay from response header
        raise self.retry(exc=exc, countdown=int(exc.retry_after))

Padrão de Tarefa Idempotente

Projete tarefas para que possam ser executadas várias vezes com as mesmas entradas de forma segura:

@shared_task(name='orders.mark_shipped')
def mark_order_shipped(order_id: int, tracking_number: str) -> None:

…
Perguntas frequentes

O que são tarefas em segundo plano?

São ações que o site precisa fazer, mas que não precisam acontecer imediatamente ou que podem demorar. Exemplos incluem enviar emails, processar imagens ou gerar relatórios.

O que é Django?

Django é uma estrutura (framework) que ajuda a construir sites e aplicações web de forma mais rápida e organizada.

O que é Celery?

Celery é uma ferramenta que permite executar tarefas em segundo plano de forma assíncrona, ou seja, sem que elas bloqueiem o funcionamento normal do seu programa.

Detalhes

Descrição original do autor

Django + Celery async task patterns — configuration, task design, beat scheduling, retries, canvas workflows, monitoring, and testing. Use when adding background jobs, scheduled tasks, or async processing to a Django app.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#43
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas