61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
"""Celery app factory."""
|
|
|
|
from celery import Celery
|
|
|
|
from ..core.config import settings
|
|
|
|
|
|
def _broker_url() -> str:
|
|
return settings.celery.broker_url or settings.redis.url
|
|
|
|
|
|
def _result_backend() -> str:
|
|
return settings.celery.result_backend or settings.redis.url
|
|
|
|
|
|
celery_app = Celery(
|
|
"iaai_scraper",
|
|
broker=_broker_url(),
|
|
backend=_result_backend(),
|
|
)
|
|
|
|
celery_app.conf.update(
|
|
# Сериализация.
|
|
task_serializer="json",
|
|
accept_content=["json"],
|
|
result_serializer="json",
|
|
timezone="UTC",
|
|
enable_utc=True,
|
|
|
|
# Лимиты.
|
|
task_soft_time_limit=settings.celery.task_soft_time_limit,
|
|
task_time_limit=settings.celery.task_time_limit,
|
|
worker_concurrency=settings.celery.worker_concurrency,
|
|
|
|
# Playwright sync API: prefork + 1 процесс.
|
|
worker_pool="prefork",
|
|
worker_prefetch_multiplier=1,
|
|
|
|
# Retry policy брокера.
|
|
broker_connection_retry_on_startup=True,
|
|
|
|
# Beat schedule.
|
|
beat_schedule={
|
|
"periodic-sync-listing": {
|
|
"task": "iaai_scraper.worker.tasks.sync_listing_task",
|
|
"schedule": settings.celery.beat_sync_interval_minutes * 60.0,
|
|
"args": (),
|
|
"kwargs": {"limit": settings.celery.beat_sync_limit},
|
|
"options": {"queue": "scraping"},
|
|
},
|
|
},
|
|
|
|
# Роутинг задач.
|
|
task_routes={
|
|
"iaai_scraper.worker.tasks.*": {"queue": "scraping"},
|
|
},
|
|
)
|
|
|
|
# Автообнаружение задач.
|
|
celery_app.autodiscover_tasks(["iaai_scraper.worker"])
|