Files
dreamweaver/backend/app/core/celery_app.py

72 lines
2.3 KiB
Python

"""Celery application setup."""
from celery import Celery
from celery.schedules import crontab
from app.core.config import settings
if settings.redis_sentinel_enabled and settings.redis_sentinel_urls:
sentinel_broker = ";".join(settings.redis_sentinel_urls)
celery_app = Celery(
"dreamweaver",
broker=sentinel_broker,
backend=sentinel_broker,
)
celery_app.conf.broker_transport_options = {
"master_name": settings.redis_sentinel_master_name,
"sentinel_kwargs": {
"password": settings.redis_sentinel_password or None,
"socket_timeout": settings.redis_sentinel_socket_timeout,
},
}
celery_app.conf.result_backend_transport_options = {
"master_name": settings.redis_sentinel_master_name,
"sentinel_kwargs": {
"password": settings.redis_sentinel_password or None,
"socket_timeout": settings.redis_sentinel_socket_timeout,
},
}
else:
celery_app = Celery(
"dreamweaver",
broker=settings.celery_broker_url,
backend=settings.celery_result_backend,
)
celery_app.conf.update(
imports=(
"app.tasks.achievements",
"app.tasks.audio_cache",
"app.tasks.generation_maintenance",
"app.tasks.generation_workflow",
"app.tasks.memory",
"app.tasks.push_notifications",
),
task_track_started=True,
task_serializer="json",
accept_content=["json"],
result_serializer="json",
timezone="Asia/Shanghai",
enable_utc=True,
beat_schedule={
"check_push_notifications": {
"task": "app.tasks.push_notifications.check_push_notifications",
"schedule": crontab(minute="*/15"),
},
"prune_expired_memories": {
"task": "app.tasks.memory.prune_memories_task",
"schedule": crontab(minute="0", hour="3"), # Daily at 03:00
},
"prune_story_audio_cache": {
"task": "app.tasks.audio_cache.prune_story_audio_cache_task",
"schedule": crontab(minute="30", hour="3"), # Daily at 03:30
},
"prune_stale_generation_jobs": {
"task": "app.tasks.generation_maintenance.prune_stale_generation_jobs_task",
"schedule": crontab(minute="*/30"),
},
},
)
celery_app.autodiscover_tasks(["app.tasks"])