mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 17:11:09 -05:00
75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
"""
|
|
Celery configuration for ThrillWiki.
|
|
|
|
This module sets up Celery for background task processing including:
|
|
- Trending calculations
|
|
- Cache warming
|
|
- Analytics processing
|
|
- Email notifications
|
|
"""
|
|
|
|
import os
|
|
from celery import Celery
|
|
|
|
# Set the default Django settings module for the 'celery' program.
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.django.local")
|
|
|
|
app = Celery("thrillwiki")
|
|
|
|
# Get Redis URL from environment variable with fallback
|
|
REDIS_URL = os.environ.get("REDIS_URL", "redis://localhost:6379/1")
|
|
|
|
# Celery Configuration - set directly without loading from Django settings first
|
|
app.conf.update(
|
|
# Broker settings
|
|
broker_url=REDIS_URL,
|
|
result_backend=REDIS_URL,
|
|
# Task settings
|
|
task_serializer="json",
|
|
accept_content=["json"],
|
|
result_serializer="json",
|
|
timezone="America/New_York",
|
|
enable_utc=True,
|
|
# Worker settings
|
|
worker_prefetch_multiplier=1,
|
|
task_acks_late=True,
|
|
worker_max_tasks_per_child=1000,
|
|
# Task routing
|
|
task_routes={
|
|
"apps.core.tasks.trending.*": {"queue": "trending"},
|
|
"apps.core.tasks.analytics.*": {"queue": "analytics"},
|
|
"apps.core.tasks.cache.*": {"queue": "cache"},
|
|
},
|
|
# Beat schedule for periodic tasks
|
|
beat_schedule={
|
|
"calculate-trending-content": {
|
|
"task": "apps.core.tasks.trending.calculate_trending_content",
|
|
"schedule": 300.0, # Every 5 minutes
|
|
},
|
|
"warm-trending-cache": {
|
|
"task": "apps.core.tasks.trending.warm_trending_cache",
|
|
"schedule": 900.0, # Every 15 minutes
|
|
},
|
|
"cleanup-old-analytics": {
|
|
"task": "apps.core.tasks.analytics.cleanup_old_analytics",
|
|
"schedule": 86400.0, # Daily
|
|
},
|
|
},
|
|
# Task result settings
|
|
result_expires=3600, # 1 hour
|
|
task_ignore_result=False,
|
|
# Error handling
|
|
task_reject_on_worker_lost=True,
|
|
task_soft_time_limit=300, # 5 minutes
|
|
task_time_limit=600, # 10 minutes
|
|
)
|
|
|
|
# Load task modules from all registered Django apps.
|
|
app.autodiscover_tasks()
|
|
|
|
|
|
@app.task(bind=True)
|
|
def debug_task(self):
|
|
"""Debug task for testing Celery setup."""
|
|
print(f"Request: {self.request!r}")
|