certflow.services.printer.print_queue module¶
打印队列服务(持久化队列管理)
提供基于数据库(print_jobs 表)的打印任务队列管理能力,与 UI/线程解耦。 负责任务的入队、出队、状态机流转、优先级重排与断电恢复。
设计要点: - 所有状态变更均落库(commit),保证断电可恢复; - 出队顺序由 (priority DESC, created_at ASC) 决定,支持置顶/上移; - 本服务为纯逻辑层,不直接调用打印机,打印动作由 QueueWorker 驱动。
- class certflow.services.printer.print_queue.PrintQueueService(session)[源代码]¶
基类:
object打印队列服务
围绕 print_jobs 表的队列管理。每个实例绑定一个 SQLAlchemy Session, 调用方需保证该 Session 在正确的线程中使用(跨线程请各自创建实例)。
示例
>>> svc = PrintQueueService(session) >>> job = svc.enqueue(certificate_id=1, priority=5) >>> next_job = svc.get_next_pending() >>> svc.mark_running(next_job.id) >>> svc.mark_done(next_job.id)
- 参数:
session (Session)
- cancel_pending_by_certificate(certificate_id)[源代码]¶
取消指定合格证的所有 pending 任务(用于 replace_pending 去重)。
仅取消 **pending**(尚未开始)的任务;running/paused/终态任务不动—— 正在打印的任务中途取消有风险,且终态任务无需处理。
- enqueue(certificate_id, sn=None, priority=0, *, replace_pending=False)[源代码]¶
入队一个打印任务
- 参数:
- 返回:
新创建的任务对象(已落库,含自增 id)
- 返回类型:
- get_next_pending()[源代码]¶
取出下一个待打印任务(不出队,仅查询)
出队顺序:priority 降序、created_at 升序。
- 返回:
下一个 pending 任务;无则返回 None
- 返回类型:
PrintJob | None
- set_os_job_id(job_id, os_job_id)[源代码]¶
补写任务的 OS spooler 作业 ID(打印动作完成后回填)
与
mark_running()解耦:部分场景下 OS 作业 ID 在mark_running之后、打印动作执行时才产生(见 BLUEPRINT §2.3 偏差 5)。