from __future__ import annotations from contextvars import ContextVar, Token _job_id_var: ContextVar[str | None] = ContextVar("connecthub_job_id", default=None) _job_log_id_var: ContextVar[int | None] = ContextVar("connecthub_job_log_id", default=None) JobContextTokens = tuple[Token[str | None], Token[int | None]] def set_job_context(*, job_id: str | None, job_log_id: int | None) -> JobContextTokens: """ 设置当前执行上下文(用于日志隔离)。 返回 tokens,便于在 finally 中 reset 回原值。 """ t1 = _job_id_var.set(job_id) t2 = _job_log_id_var.set(job_log_id) return (t1, t2) def clear_job_context(tokens: JobContextTokens | None = None) -> None: """ 清理当前执行上下文。 - 若提供 tokens:reset 回进入上下文前的值(推荐) - 否则:直接置空 """ if tokens is not None: _job_id_var.reset(tokens[0]) _job_log_id_var.reset(tokens[1]) return _job_id_var.set(None) _job_log_id_var.set(None) def get_job_id() -> str | None: return _job_id_var.get() def get_job_log_id() -> int | None: return _job_log_id_var.get()