Skip to main content

Redis message queue utils: a simple distributed lock based on redis, a simple message queue based on redis with ack feature.

Project description

redmq

Redis message queue utils: a simple distributed lock based on redis, a simple message queue based on redis with ack feature.

Install

pip install redmq

Usage Examples

redmq.lock.RedisLock

import redis
from redmq.lock import RedisLock

conn = redis.Redis()
lock_name = "test01_lock"

with RedisLock(conn, lock_name) as locked:
    if locked:
        pass # do things if acquired the lock
    else:
        pass # do things if not acquired the lock

redmq.message_queue.MessageQueue

worker.py

import time
import redis
from redmq.message_queue import MessageQueue

conn = redis.Redis()
mq = MessageQueue(conn)
while True:
    task = mq.pop_nowait()
    if task:
        message = task["message"]
        mq.acknowledge(task, result_data=message.upper())
    else:
        time.sleep(0.1)

client.py

import time
import redis
from redmq.message_queue import MessageQueue

conn = redis.Redis()
mq = MessageQueue(conn)
task1 = mq.push("task1")
task_info = None
for _ in range(100):
    task_info = mq.get_result_nowait(task1)
    if task_info:
        break
    time.sleep(0.1)
print(task_info["result"])

start worker

python3 worker.py

start client

python3 client.py

client output

test@test redmq % python3.9 client.py 
{'error_message': 'OK', 'result_data': 'TASK1', 'success': True, 'error_code': 0}

redmq.message_queue.Consumer

consumer.py

import redis
from redmq import MessageQueue
from redmq import Consumer

def pingpong_handler(msg):
    return "pong"

conn = redis.Redis("redis")
mq = MessageQueue(conn)
consumer = Consumer(mq)
consumer.register_handler("debug.pingpong", pingpong_handler)
consumer.start()
consumer.wait()

client.py

import redis
from redmq import MessageQueue

conn = redis.Redis("redis")
mq = MessageQueue(conn)
task = {
    "handler": "debug.pingpong",
}
response = mq.pushwait(task)
print(response["result"])

result

test@test redmq % python3 examples/client.py
{'error_message': 'OK', 'result_data': 'pong', 'success': True, 'error_code': 0}

Why NOT using blpop instead of lpop?

We do pop_nowait via LUA script, but redis is NOT allow us to use blpop in LUA script.

Releases

v0.1.0

  • First release.

v0.1.1

  • redmq.message_queue.MessageQueue.push takes high_priority parameter. Normal message use FIFO rule, and high_priority message use LIFO rule.

v0.2.0

  • Add redmq.message_queue.Consumer, redmq.message_queue.RequestsHandler, redmq.message_queue.RequestsConsumer.
  • Add redmq.schedule.Schedule and redmq.schedule.Scheduler.
  • Add redmq.lock.RedisLock.renew method.
  • Extend redmq.lock.RedisLock.acquire to allow the same worker acquire the same lock many times.
  • Add generic async message queue handler server requests-server.

v0.2.1

  • redmq.schedule.add_runonce_task, redmq.schedule.add_crontab_task, redmq.schedule.add_interval_task add update paraemter to control if update the schedule by force or not.
  • Fix redmq.schedule.add_crontab_task timezone problem.
  • Fix redmq.schedule.add_interval_task rule change problem.

v0.2.2

  • Doc update.

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

redmq-0.2.2.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

redmq-0.2.2-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file redmq-0.2.2.tar.gz.

File metadata

  • Download URL: redmq-0.2.2.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.12

File hashes

Hashes for redmq-0.2.2.tar.gz
Algorithm Hash digest
SHA256 ef3420170fddd8194f86edb21aa14a7b817b65860ba6653a56cfc4c35acdddd4
MD5 c89be255ca30813e460e57ec589d61df
BLAKE2b-256 65c23ef6af22c95e232713c2205253671a561fe5fb7c4c35d09be005dd52466c

See more details on using hashes here.

File details

Details for the file redmq-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: redmq-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 10.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.12

File hashes

Hashes for redmq-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c45f3067a22aec2ce6042e662b58ca956f7c4bf0b9154698c91978128ffdb600
MD5 e499aa515ee9765c533c17c6cf6e6d6b
BLAKE2b-256 c4b43b9a43577a7bab55efa15f65c1a1d3b22f294c7591b552b1bd557105d33b

See more details on using hashes here.

Supported by

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