from __future__ import annotations import logging import os from typing import Any, Callable logger = logging.getLogger(__name__) def _env_flag(name: str) -> bool: value = os.getenv(name) if value is None: return False return value.strip().lower() in {"1", "true", "yes", "on"} def dispatch_task(task: Callable[..., Any], *args: Any, **kwargs: Any) -> Any: """ 根据环境变量决定直接执行任务还是通过 Celery delay。 本地开发默认走 eager,同步执行便于调试。 """ eager = _env_flag("CELERY_TASK_ALWAYS_EAGER") logger.info("dispatch_task task=%s eager=%s", getattr(task, "name", task.__name__), eager) if _env_flag("CELERY_TASK_ALWAYS_EAGER"): return task.apply(args=args, kwargs=kwargs) return task.delay(*args, **kwargs)