|
|
@@ -251,7 +251,8 @@ def _has_running_content_task() -> bool:
|
|
|
async def scheduled_tick():
|
|
|
"""
|
|
|
按 SCHEDULE_DISPATCH_INTERVAL_SECONDS 派发:若当前并发有空槽,则从 demand_content 取
|
|
|
- 当天(dt=今日)、尚未出现在 demand_find_task 中且 score 最高的一条需求并执行。
|
|
|
+ 当天(dt=今日)、尚未出现在 demand_find_task 中的 1 条需求并执行。
|
|
|
+ 调度顺序按“品类分层轮转”:先各品类 top1(层内 score 高者优先),再各品类 top2,依此类推。
|
|
|
"""
|
|
|
if SCHEDULE_DISPATCH_NOT_BEFORE_HOUR is not None:
|
|
|
now = datetime.now(SCHEDULER_TZ)
|
|
|
@@ -307,9 +308,15 @@ async def scheduled_tick():
|
|
|
return
|
|
|
|
|
|
score = item.get("score")
|
|
|
+ merge_leve2 = (item.get("merge_leve2") or "").strip()
|
|
|
+ category_rank = item.get("category_rank")
|
|
|
logger.info(
|
|
|
- f"定时任务领取(当天 score 最高):demand_content_id={demand_content_id}, "
|
|
|
- f"dt={dt}, score={score}"
|
|
|
+ "定时任务领取(品类分层轮转):demand_content_id=%s, dt=%s, score=%s, merge_leve2=%s, category_rank=%s",
|
|
|
+ demand_content_id,
|
|
|
+ dt,
|
|
|
+ score,
|
|
|
+ merge_leve2 or "<EMPTY>",
|
|
|
+ category_rank,
|
|
|
)
|
|
|
create_task_record(demand_content_id)
|
|
|
# 后台执行:由 execute_task 内部 semaphore 控制并发占用
|