- "backend/tasks/__init__.py" - "backend/tasks/notifications.py" - "backend/worker.py" - "docker-compose.yml" GSD-Task: S01/T02
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
"""Celery application instance for the Chrysopedia pipeline.
|
|
|
|
Usage:
|
|
celery -A worker worker --loglevel=info
|
|
celery -A worker worker --beat --loglevel=info (with Beat scheduler)
|
|
"""
|
|
|
|
from celery import Celery
|
|
from celery.schedules import crontab
|
|
|
|
from config import get_settings
|
|
|
|
settings = get_settings()
|
|
|
|
celery_app = Celery(
|
|
"chrysopedia",
|
|
broker=settings.redis_url,
|
|
backend=settings.redis_url,
|
|
)
|
|
|
|
celery_app.conf.update(
|
|
task_serializer="json",
|
|
result_serializer="json",
|
|
accept_content=["json"],
|
|
timezone="UTC",
|
|
enable_utc=True,
|
|
task_track_started=True,
|
|
task_acks_late=True,
|
|
worker_prefetch_multiplier=1,
|
|
)
|
|
|
|
# Import pipeline.stages so that @celery_app.task decorators register tasks.
|
|
# This import must come after celery_app is defined.
|
|
import pipeline.stages # noqa: E402, F401
|
|
import tasks.notifications # noqa: E402, F401
|
|
|
|
# ── Celery Beat schedule ─────────────────────────────────────────────────────
|
|
|
|
celery_app.conf.beat_schedule = {
|
|
"send-digest-emails": {
|
|
"task": "tasks.notifications.send_digest_emails",
|
|
"schedule": crontab(hour=9, minute=0), # daily at 09:00 UTC
|
|
},
|
|
}
|