Skip to content

quickslurm

Build/Publish PyPI Python versions License

A lightweight Python wrapper around Slurm for:

  • Submitting batch jobs (sbatch)
  • Running commands (srun)
  • Cancelling jobs (scancel)

It focuses on safe subprocess handling, simple ergonomics, and sensible defaults.

Full documentation can be found here: Quickslurm Docs

Features

  • sbatch and srun helpers with consistent argument handling
  • Optional built-in logging (file and stderr)
  • Pass-through environment variables (base and per-call overrides)
  • Convenience for inline sbatch scripts
  • Optional wait for job completion after sbatch submission

Installation

  • Requires Python 3.8+
  • Requires Slurm 23.02+ be installed on the system
  • Assumes Slurm binaries (sbatch, srun, scancel, sacct if using wait) are on PATH

```shell script pip install quickslurm

---

## Quick start

```python
from quickslurm import Slurm, SlurmError

slurm = Slurm(enable_logging=True)

# Submit an existing script
submit = slurm.sbatch(
    script_path="train.sh",
    sbatch_options={
        "job-name": "trainA",
        "time": "00:30:00",
        "partition": "short",
        "cpus-per-task": 4,
        "mem": "8G",
        "output": "slurm-%j.out",
    },
    script_args=["--epochs", "10"],
)
print("Job ID:", submit.job_id)

# Submit an inline command (temp script will be generated)
submit2 = slurm.submit_inline(
    command=["python", "train.py", "--epochs", "5"],
    sbatch_options={"time": "00:10:00", "job-name": "quick-train"},
)
print("Inline Job ID:", submit2.job_id)

# Run something via srun (non-interactive)
res = slurm.run(["hostname"], srun_options={"ntasks": 1})
print("Hostname:", res.stdout.strip())

# Cancel a job
slurm.cancel(submit2.job_id)

Sample output:

Job ID: 12300008
Inline Job ID: 12300009
Hostname: testnode1