27 lines
818 B
Python
27 lines
818 B
Python
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)
|