jobs
tit.server.routes.jobs ¶
/api/jobs and /api/jobs/groups — thin HTTP wrappers over :mod:tit.jobs.manager.
Every rule that decides whether a job can run (dependencies, locks, budget) lives in
:mod:tit.jobs; this module only translates HTTP into :class:~tit.jobs.manager.JobManager
calls, plus the group/DAG seam into :mod:tit.jobs.plans. /api/jobs/groups covers every
per-subject kind (pre, sim, flex, flex_adaptive, flex_pareto, ex, mex);
the concurrency cap it carries is enforced by the scheduler, never by client-side POST timing.
submit_group ¶
Submit a per-subject job group (R3).
kind=pre expands into tit.jobs.plans.plan_preprocessing's G1-G6/report DAG;
sim/flex/flex_adaptive/flex_pareto/ex/mex expand into one independent
job per (subject, config) entry via tit.jobs.plans.plan_per_subject.
The whole group is created queued in this one request; tit.jobs.scheduler.evaluate() runs one
job per product at a time, so its jobs run one after another. A parallel_subjects field from
an older client is ignored.
subject_configs (optional, additive) carries per-subject resolved configs -- a page whose
config depends on the subject (an ROI resolved against that subject's atlas, a leadfield
path) sends one entry per job instead of one template. Entries are matched to
subject_ids by their subject_id; a subject with no entry uses config. Whatever the
caller sends, each generated config's subject_id is forced to its own subject.