Skip to main content

taskferry-jobs

Batch job backends for Taskferry: AWS Batch, Kubernetes and Azure Container Apps Jobs.

flowchart TD
    JS["JobSpec<br/>image · argv · resources · timeout"]
    TP["Taskferry router"]

    JS --> TP

    TP -->|"profile=gpu"| K8S["Kubernetes"]
    TP -->|"profile=batch"| AWS["AWS Batch"]
    TP -->|"profile=azure"| ACA["Container Apps"]
pip install 'taskferry-jobs[aws]'
pip install 'taskferry-jobs[kubernetes]'
pip install 'taskferry-jobs[azure]'

Every SDK is imported lazily inside the backend that needs it, so import taskferry_jobs pulls in none of them.

Use

from taskferry import Resources, Taskferry

runtime = Taskferry.from_mapping(
    {
        "backends": {
            "gpu": {"factory": "kubernetes", "namespace": "batch"},
            "batch": {"factory": "aws-batch", "job_queue": "q", "job_definition": "d"},
        },
        "routes": [
            {"kind": "job", "profile": "gpu", "backend": "gpu"},
            {"kind": "job", "profile": "batch", "backend": "batch"},
        ],
    }
)

handle = runtime.jobs.submit(
    "train-model",
    image="pytorch:2.4-cuda",
    profile="gpu",
    resources=Resources(cpu="8", memory="32Gi", gpu=2),
    timeout=7200,
)

Capabilities

AWS Batch Kubernetes Container Apps (Cloud Run) (subprocess)
CPU / MEMORY yes yes yes no no
GPU yes yes no no no
PARALLELISM yes yes yes yes no
TIMEOUT yes yes yes yes yes
RESULT yes no no no yes

The "no"s are the point, and they are asserted in the test suite rather than only documented. A spec asking for a GPU on Container Apps raises UnsupportedCapability at submit time instead of running on a CPU and returning results nobody can explain three days later.

Resource translation

Resources uses Kubernetes quantity syntax ("1000m", "512Mi") because it is unambiguous about units and every runtime can convert from it:

Resources Kubernetes AWS Batch Container Apps
cpu="2000m" 2000m VCPU: 2 cpu: 2.0
memory="16Gi" 16Gi MEMORY: 16384 memory: 16Gi
gpu=2 nvidia.com/gpu: 2 GPU: 2 rejected

Testing

Every client is injectable, so the whole suite runs with no cloud account and no cluster:

KubernetesJobBackend(api=FakeBatchV1Api())
BatchJobBackend(client=FakeBatchClient(), job_queue="q", job_definition="d")

License

Apache-2.0.

Release files for taskferry-jobs 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for taskferry-jobs 0.3.0
File Size Uploaded
taskferry_jobs-0.3.0.tar.gz 19.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for taskferry-jobs 0.3.0
File Interpreter ABI Platform
taskferry_jobs-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 43.2 kB

Release files / taskferry_jobs-0.3.0.tar.gz

Download URL taskferry_jobs-0.3.0.tar.gz
Size 19.5 kB
Tags Source
SHA-256 checksum
How to use checksums
b103e1e1c8921ac1264737d37015ca1d3a9cb10968420ee8b07011f8d47d336e
BLAKE2b-256 checksum
How to use checksums
8c84592e6725337d9c59a79c3dd09f6f01dae45274b7e850f187fbb6a8d6705a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release files / taskferry_jobs-0.3.0-py3-none-any.whl

Download URL taskferry_jobs-0.3.0-py3-none-any.whl
Size 23.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1b80d3955cb883fbc1c300d57c763412cbee7d3c5824452e75142037cbc8ba4a
BLAKE2b-256 checksum
How to use checksums
bc6af7a181f94987e373c192c943158eca8cc3491c8d3c47f192c84fb5e9c426
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page