"""自动化调度:作业注册、调度线程与各作业实现。 登记作业请放在 ``register_default_jobs()``,由 ``main.py`` 在启动时调用一次, 避免 import 顺序影响注册结果。 """ from __future__ import annotations from .jobs.account_events_collect import JOB_KEY as ACCOUNT_EVENTS_KEY from .jobs.account_events_collect import run_account_events_collect from .jobs.ck_health import JOB_KEY as CK_HEALTH_KEY from .jobs.ck_health import run_ck_health from .jobs.ck_relogin import JOB_KEY as CK_RELOGIN_KEY from .jobs.ck_relogin import run_ck_relogin from .scheduler import ( JobSpec, automation_enabled, ensure_jobs, register_job, registered_jobs, reset_registry, run_due_jobs, run_job_now, scheduler_status, start_scheduler, stop_scheduler, ) __all__ = [ "ACCOUNT_EVENTS_KEY", "CK_HEALTH_KEY", "CK_RELOGIN_KEY", "JobSpec", "automation_enabled", "ensure_jobs", "register_default_jobs", "register_job", "registered_jobs", "reset_registry", "run_account_events_collect", "run_ck_health", "run_ck_relogin", "run_due_jobs", "run_job_now", "scheduler_status", "start_scheduler", "stop_scheduler", ] def register_default_jobs() -> None: """登记内置作业(幂等)。""" register_job( JobSpec( key=CK_RELOGIN_KEY, title="CK 自动重登", # interval_seconds 同样是「同一行多久重试一次」的兜底(真实节奏由 # relogin_next_at 的退避表决定);批次小、跑得慢,单轮 10 条。 interval_seconds=6 * 3600, batch_size=10, concurrency=3, run=run_ck_relogin, ) ) register_job( JobSpec( key=CK_HEALTH_KEY, title="CK 自动巡检", # interval_seconds = 单账号多久重新检测一次(不是作业周期; # 作业每个 tick 都跑)。全库 12,881 条按 5 分钟一轮、单轮 200 条 # 反推,吞吐 40 条/分钟,够 6 小时内覆盖一遍(规划 §7.3)。 interval_seconds=6 * 3600, batch_size=200, concurrency=5, run=run_ck_health, ) ) register_job( JobSpec( key=ACCOUNT_EVENTS_KEY, title="账号事件收集", # interval_seconds 这里无实际意义(收集器每轮只按水位线往后取, # 取不到就空转),保留一个值以复用现有调度与页面。 interval_seconds=10 * 60, batch_size=500, concurrency=1, run=run_account_events_collect, ) )