schon/evibes/settings/celery.py
fureunoir 4c7b40b899 Features: 1) Add orjson serializer and integrate it into Celery configuration for enhanced performance and compatibility; 2) Introduce configurable task settings such as soft and hard time limits, task tracking, and event serialization for better control and observability.
Fixes: 1) Update worker entrypoints to adjust prefetch multiplier and memory/task limits for optimized resource usage.

Extra: 1) Refactor Celery settings into a dedicated file for improved organization and maintainability; 2) Adjust Docker entrypoints to align with updated task configurations; 3) Register `orjson` serializer in a separate module for cleaner code structure.
2026-01-04 18:37:00 +03:00

111 lines
3 KiB
Python

from datetime import timedelta
from evibes.settings.base import REDIS_PASSWORD, TIME_ZONE
CELERY_ENABLE_UTC = False
CELERY_TIMEZONE = TIME_ZONE
CELERY_BROKER_URL = f"redis://:{REDIS_PASSWORD}@redis:6379/0"
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True
CELERY_BROKER_HEARTBEAT = 10
CELERY_BROKER_HEARTBEAT_CHECKRATE = 2
CELERY_BROKER_POOL_LIMIT = 10
CELERY_BROKER_TRANSPORT_OPTIONS = {
"visibility_timeout": 3600,
"retry_policy": {
"interval_start": 0.1,
"interval_step": 0.2,
"max_retries": 5,
},
"socket_keepalive": True,
"socket_timeout": 30,
"socket_connect_timeout": 30,
"retry_on_timeout": True,
}
CELERY_RESULT_BACKEND = CELERY_BROKER_URL
CELERY_RESULT_EXTENDED = True
CELERY_RESULT_EXPIRES = timedelta(days=1)
CELERY_RESULT_COMPRESSION = "zlib"
CELERY_TASK_SERIALIZER = "orjson"
CELERY_RESULT_SERIALIZER = "orjson"
CELERY_ACCEPT_CONTENT = ["orjson", "json"]
CELERY_EVENT_SERIALIZER = "orjson"
CELERY_TASK_ACKS_LATE = True
CELERY_TASK_REJECT_ON_WORKER_LOST = True
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_SEND_SENT_EVENT = True
CELERY_WORKER_SEND_TASK_EVENTS = True
CELERY_TASK_SOFT_TIME_LIMIT = 3600
CELERY_TASK_TIME_LIMIT = 3900
CELERY_TASK_ANNOTATIONS = {
"engine.core.tasks.update_products_task": {
"rate_limit": "1/m",
"time_limit": 7200,
"soft_time_limit": 6900,
"acks_late": True,
"reject_on_worker_lost": True,
},
}
CELERY_WORKER_HIJACK_ROOT_LOGGER = False
CELERY_WORKER_PREFETCH_MULTIPLIER = 4
CELERY_WORKER_MAX_TASKS_PER_CHILD = (
1000
)
CELERY_WORKER_DISABLE_RATE_LIMITS = False
CELERY_TASK_ROUTES = {
"engine.core.tasks.update_products_task": {"queue": "stock_updater"},
}
CELERY_TASK_DEFAULT_QUEUE = "default"
CELERY_TASK_DEFAULT_EXCHANGE = "default"
CELERY_TASK_DEFAULT_ROUTING_KEY = "default"
CELERY_TASK_STORE_ERRORS_EVEN_IF_IGNORED = True
CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers.DatabaseScheduler"
CELERY_BEAT_SCHEDULE = {
"backup_task": {
"task": "engine.core.tasks.backup_task",
"schedule": timedelta(days=7),
"options": {"queue": "default"},
},
"update_products_task": {
"task": "engine.core.tasks.update_products_task",
"schedule": timedelta(minutes=60),
"options": {"queue": "stock_updater"},
},
"update_orderproducts_task": {
"task": "engine.core.tasks.update_orderproducts_task",
"schedule": timedelta(minutes=1),
"options": {"queue": "default"},
},
"set_default_caches_task": {
"task": "engine.core.tasks.set_default_caches_task",
"schedule": timedelta(hours=4),
"options": {"queue": "default"},
},
"remove_stale_product_images": {
"task": "engine.core.tasks.remove_stale_product_images",
"schedule": timedelta(days=1),
"options": {"queue": "default"},
},
"process_promotions": {
"task": "engine.core.tasks.process_promotions",
"schedule": timedelta(hours=2),
"options": {"queue": "default"},
},
}