Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

redis-work-queue-0.1.5.tar.gz (6.6 kB view details)

Uploaded Source

Built Distribution

redis_work_queue-0.1.5-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

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

Hashes for redis-work-queue-0.1.5.tar.gz
Algorithm Hash digest
SHA256 e3a018d71b586fd9907df0c3fc68153a5fc3511b7bb43c0c7ff30ce49da68996
MD5 39e7bd682087f43d65761d2688eb2767
BLAKE2b-256 d41c9ce0a881940407695bb32674790d16a9ca5591b9a30933a06016949f7dd9

See more details on using hashes here.

File details

Details for the file redis_work_queue-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for redis_work_queue-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 04e48b21dda125dd82b3727fba59b143c5b0c2372d01a406ab62f86fa754103f
MD5 cf6beda2c1c21906b6471394dba8aefb
BLAKE2b-256 fe770776744402d4a3d06412985d8fa517ee4ca01fc90b1958578d937f020239

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page