Simple Seamless jobserver implementation
Project description
seamless-jobserver
seamless-jobserver is a lightweight async HTTP service in the Seamless ecosystem. It receives transformation jobs over HTTP, dispatches them to spawned Seamless worker processes, and returns the results. It is one of the four backend services that seamless-remote connects to.
This is a standalone service, not a library. User workflow code never imports seamless-jobserver — it runs as an independent process, normally launched by seamless-config via remote-http-launcher. The only user-facing entry point is the seamless-jobserver CLI command.
How it works
The jobserver is a single-module (jobserver.py) aiohttp server. On startup it spawns a pool of Seamless worker processes (via seamless-transformer). Incoming transformation requests arrive over HTTP, are dispatched to the worker pool, and results are returned to the caller — which is always seamless-remote's jobserver_remote module, never user code directly.
HTTP endpoints
| Endpoint | Method | Description |
|---|---|---|
/ |
GET | Welcome / version check |
/healthcheck |
GET | Liveness probe |
/run-transformation |
GET | Execute a transformation and return the result checksum |
Lifecycle
seamless-configwrites a status file and launchesseamless-jobserver(viaremote-http-launcheror directly).- The jobserver picks a port (fixed or random from a range), spawns worker processes, and starts listening.
- It writes its port and status back to the status file so
seamless-remotecan discover it. - If no requests arrive within the inactivity timeout, the jobserver shuts down automatically.
Relation to the Seamless ecosystem
seamless-transformer (user-facing API: direct, delayed)
│
│ delegate job
▼
seamless-remote
│ jobserver_remote
│ async HTTP
▼
seamless-jobserver ◄── this package
│
│ dispatches to worker pool
▼
seamless-transformer worker (spawned child processes)
The jobserver sits between seamless-remote (which sends it work) and seamless-transformer (whose worker processes do the actual computation). It is a simpler, single-machine alternative to the Dask-based execution path provided by seamless-dask.
CLI
seamless-jobserver [options]
| Flag | Default | Description |
|---|---|---|
--port PORT |
— | Listen on a specific port (mutually exclusive with --port-range) |
--port-range START END |
— | Pick a random free port from a range |
--host HOST |
0.0.0.0 |
Listening address |
--status-file PATH |
— | JSON file for reporting port and status |
--timeout SECONDS |
— | Auto-shutdown after this many seconds of inactivity |
--workers N |
1 |
Number of worker processes to spawn |
Installation
pip install seamless-jobserver
Requires Python >= 3.10. Dependencies: aiohttp, seamless-core, seamless-transformer. Also imports seamless-remote and seamless-config at runtime for client cleanup and remote-client configuration respectively.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file seamless_jobserver-0.2.0.tar.gz.
File metadata
- Download URL: seamless_jobserver-0.2.0.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e558d3a6cced61860137c5b1602e3ade526acc69181f3febb670d68b88a57c7
|
|
| MD5 |
f9d6eb94d88c66d64060a7eb8b2fbcbb
|
|
| BLAKE2b-256 |
1733bae72920dfb990d9640584ce17d5ce989a2edebe2446da76f6bafa4f9c7c
|
File details
Details for the file seamless_jobserver-0.2.0-py3-none-any.whl.
File metadata
- Download URL: seamless_jobserver-0.2.0-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bd22d6a0cf535bc75c6812dddfeac09d49fa9124642ed956f49221b58398728
|
|
| MD5 |
c574fc566f1eef88dce34a621828480e
|
|
| BLAKE2b-256 |
f7335c320929a7f8842927db62a7b88723871b25b76474290f259c26c43cfb99
|