Architecture
Components
Worker → Transport → PullQueue → CommandDispatcher / DeficitScheduler / TaskRepository
PullQueue — orchestrates heartbeat hooks, management commands, WDRR, and storage claims.
DeficitScheduler — pure deficit ledger (credits per epoch, debit on claim, zero-out on empty priority).
CommandDispatcher — per-
worker_idFIFO ofpulq.models.ManagementCommand.TaskRepository — protocol for enqueue + atomic claim + completion (default:
pulq.storage.memory.InMemoryTaskRepository).Transport — protocol for
request_work/report_completion(default:pulq.transport.local.LocalTransport).
Data models (pulq.models)
The package groups Pydantic types by concern:
pulq.models.enums—TaskStatus,CommandType,NoWorkReasonpulq.models.task—Taskpulq.models.work—ManagementCommand,NoWork,NoPendingTaskpulq.models.unions—WorkResponseandClaimResulttype aliases with discriminated union validationpulq.models.scheduler_config—DeficitSchedulerConfig(WDRR parameters; also re-exported frompulq.core.schedulerfor convenience)
Wire formats are parsed with pulq.parsing using Pydantic’s TypeAdapter.
Discriminated unions
Work items returned from pulls use a type discriminator:
task→pulq.models.Taskcommand→pulq.models.ManagementCommandno_work→pulq.models.NoWork(null object instead ofNone)
Use pulq.parse_work_response() to validate untrusted data. Pydantic’s discriminated union validation automatically handles routing to the correct model based on the type field.