|
""" |
|
Unified Celery configuration for the Lin application. |
|
This centralizes all Celery configuration to avoid conflicts. |
|
""" |
|
|
|
import os |
|
from celery import Celery |
|
from celery.schedules import crontab |
|
from backend.config import Config |
|
|
|
|
|
celery_app = Celery('lin_app') |
|
|
|
|
|
celery_app.conf.broker_url = os.environ.get('CELERY_BROKER_URL', 'redis://localhost:6379/0') |
|
celery_app.conf.result_backend = os.environ.get('CELERY_RESULT_BACKEND', 'redis://localhost:6379/0') |
|
|
|
|
|
celery_app.conf.update( |
|
|
|
task_serializer='json', |
|
accept_content=['json'], |
|
result_serializer='json', |
|
timezone='UTC', |
|
enable_utc=True, |
|
|
|
|
|
task_routes={ |
|
'backend.celery_tasks.content_tasks.generate_content_task': {'queue': 'content'}, |
|
'backend.celery_tasks.content_tasks.publish_post_task': {'queue': 'publish'}, |
|
'backend.celery_tasks.schedule_loader.load_schedules_task': {'queue': 'scheduler'}, |
|
}, |
|
|
|
|
|
worker_prefetch_multiplier=1, |
|
task_acks_late=True, |
|
worker_max_tasks_per_child=100, |
|
|
|
|
|
|
|
beat_schedule={ |
|
|
|
'load-schedules': { |
|
'task': 'backend.celery_tasks.schedule_loader.load_schedules_task', |
|
'schedule': crontab(minute='*/5'), |
|
}, |
|
}, |
|
|
|
|
|
result_expires=3600, |
|
|
|
|
|
task_soft_time_limit=300, |
|
task_time_limit=600, |
|
|
|
|
|
task_annotations=( |
|
('backend.celery_tasks.content_tasks.generate_content_task', {'rate_limit': '10/h'}), |
|
('backend.celery_tasks.content_tasks.publish_post_task', {'rate_limit': '30/h'}), |
|
), |
|
|
|
|
|
task_reject_on_worker_lost=True, |
|
worker_disable_rate_limits=False, |
|
|
|
|
|
result_backend_transport_options={'visibility': 'hidden'}, |
|
broker_connection_max_retries=3, |
|
broker_connection_retry_delay=5, |
|
) |
|
|
|
|
|
from backend import celery_tasks |
|
|
|
__all__ = ['celery_app'] |