Queue Manager
A Python-based job queue system with per-job processes and signal variables.
Features
- Per-Job Processes: Each job runs in its own OS process for isolation
- Signal Variables: Jobs communicate via shared state protected by mutexes
- Registry Persistence: Job states and results are persisted to a registry
- Process Control: Start, stop, and delete jobs with graceful termination
- Progress Tracking: Real-time progress updates and status monitoring
- Error Handling: Comprehensive error handling and recovery mechanisms
Multiprocessing start method
queuemgr creates every job/manager process from its own local
multiprocessing context (see queuemgr/mp_context.py) instead of
relying on the process-wide default. That context defaults to spawn,
which does not fork the calling process and therefore does not duplicate
live threads, open sockets, or an in-flight asyncio event loop (e.g. a
running asyncio/hypercorn server) into the child.
queuemgr never calls multiprocessing.set_start_method, so it does not
read or mutate the global default start method used by your application or
other libraries. If you need a different method (for example because your
deployment environment cannot use "spawn"), set the
QUEUEMGR_MP_START_METHOD environment variable to "spawn",
"forkserver", or "fork" before queuemgr creates its first process.
export QUEUEMGR_MP_START_METHOD=forkserver
Installation
pip install queuemgr
Quick Start
from queuemgr.queue.job_queue import JobQueue
from queuemgr.core.registry import JsonlRegistry
from queuemgr.jobs.base import QueueJobBase
from queuemgr.core.types import JobStatus
from queuemgr.core.ipc import update_job_state
class MyJob(QueueJobBase):
def execute(self):
# Your job logic here
for i in range(100):
update_job_state(
self._shared_state,
progress=i,
description=f"Processing item {i}"
)
def on_start(self):
update_job_state(self._shared_state, description="Job started")
def on_stop(self):
update_job_state(self._shared_state, description="Job stopped")
def on_end(self):
update_job_state(self._shared_state, description="Job completed")
def on_error(self, exc):
update_job_state(self._shared_state, description=f"Job failed: {exc}")
# Create queue and job
registry = JsonlRegistry("my_registry.jsonl")
queue = JobQueue(registry)
job = MyJob("my-job-1", {"param": "value"})
# Add and start job
queue.add_job(job)
queue.start_job("my-job-1")
# Monitor progress
status = queue.get_job_status("my-job-1")
print(f"Status: {status.status}, Progress: {status.progress}%")
Examples
See the examples/ directory for complete examples:
simple_job.py- Basic job creation and executionerror_handling_job.py- Error handling and recoveryprogress_job.py- Long-running job with progress updatesregistry_example.py- Registry functionality and job history
Development
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run tests with coverage
pytest --cov=queuemgr
# Format code
black queuemgr tests
# Lint code
flake8 queuemgr tests
# Type check
mypy queuemgr
License
MIT License - see LICENSE file for details.
Author
Vasiliy Zdanovskiy - vasilyvz@gmail.com
vvz-queuemgr
Metadata
Release files for queuemgr 1.0.24
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| queuemgr-1.0.24.tar.gz | 157.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| queuemgr-1.0.24-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 295.1 kB
Release files / queuemgr-1.0.24.tar.gz
| Download URL | queuemgr-1.0.24.tar.gz |
|---|---|
| Size | 157.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a3d03e41a9981ed6ff48627876fa461b8769e2853171493546da422ceea6415c
|
|
BLAKE2b-256 checksum How to use checksums |
b84973393963495bdc3052e159cc9bbe846d542d283fbc12dfcd7a327b8cf461
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / queuemgr-1.0.24-py3-none-any.whl
| Download URL | queuemgr-1.0.24-py3-none-any.whl |
|---|---|
| Size | 138.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
717bb3a2a4ecc09aec6b7bf365091b0d0517172a1c516c8a888a9762a57eb75b
|
|
BLAKE2b-256 checksum How to use checksums |
b4e142ca5d6ccd986cd459fd7c3d2f3503b1ceb7739f9fc04173ec7c1c8f7b27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Security for queuemgr 1.0.24
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.