A work queue, on top of a redis database, with implementations in Python, Rust, Go, Node.js (TypeScript) and Dotnet (C#).
Project description
A work queue, on top of a redis database, with implementations in Python, Rust, Go, Node.js (TypeScript) and Dotnet (C#).
This is the Python implementations. For an overview of how the work queue works, it's limitations, and the general concepts and implementations in other languages, please read the redis-work-queue readme.
Setup
from redis import Redis
from redis_work_queue import KeyPrefix, WorkQueue
db = Redis(host='your-redis-server')
work_queue = WorkQueue(KeyPrefix("example_work_queue"));
Adding work
Creating Items
from redis_work_queue import Item
# Create an item from bytes
bytes_item = Item(b"[1,2,3]")
# Create an item from a string
string_item = Item('[1,2,3]');
# Create an item by json serializing an object
json_item = Item.from_json_data([1, 2, 3])
# Retreive an item's data, as bytes:
assert bytes_item.data() == b"[1,2,3]"
assert bytes_item.data() == string_item.data()
assert bytes_item.data() == json_item.data()
# Parse an item's data as JSON:
assert bytes_item.data_json() == [1, 2, 3]
Add an item to a work queue
work_queue.add_item(db, item)
Completing work
Please read the documentation on leasing and completing items.
from redis_work_queue import Item
while True:
# Wait for a job with no timeout and a lease time of 5 seconds.
# Use work_queue.lease(db, 5, timeout=10) to timeout and return `None` after 10 seconds.
job: Item | None = work_queue.lease(db, 5)
assert job is not None
do_some_work(job)
work_queue.complete(db, job)
Handling errors
Please read the documentation on handling errors.
from redis_work_queue import Item
while True:
# Wait for a job with no timeout and a lease time of 5 seconds.
job: Item = work_queue.lease(db, 5)
try:
do_some_work(job)
except Exception as err:
if should_retry(err):
# Drop a job that should be retried - it will be returned to the work queue after
# the (5 second) lease expires.
pass
else:
# Errors that shouldn't cause a retry should mark the job as complete so it isn't
# tried again.
log_error(err)
work_queue.complete(db, &job)
continue
# Mark successful jobs as complete
work_queue.complete(db, job)
Project details
Release history Release notifications | RSS feed
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
File details
Details for the file redis-work-queue-0.1.5.tar.gz.
File metadata
- Download URL: redis-work-queue-0.1.5.tar.gz
- Upload date:
- Size: 6.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 | e3a018d71b586fd9907df0c3fc68153a5fc3511b7bb43c0c7ff30ce49da68996 |
|
| MD5 | 39e7bd682087f43d65761d2688eb2767 |
|
| BLAKE2b-256 | d41c9ce0a881940407695bb32674790d16a9ca5591b9a30933a06016949f7dd9 |
File details
Details for the file redis_work_queue-0.1.5-py3-none-any.whl.
File metadata
- Download URL: redis_work_queue-0.1.5-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 | 04e48b21dda125dd82b3727fba59b143c5b0c2372d01a406ab62f86fa754103f |
|
| MD5 | cf6beda2c1c21906b6471394dba8aefb |
|
| BLAKE2b-256 | fe770776744402d4a3d06412985d8fa517ee4ca01fc90b1958578d937f020239 |