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_priorityparameter. Normal message use FIFO rule, andhigh_prioritymessage 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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef3420170fddd8194f86edb21aa14a7b817b65860ba6653a56cfc4c35acdddd4
|
|
| MD5 |
c89be255ca30813e460e57ec589d61df
|
|
| BLAKE2b-256 |
65c23ef6af22c95e232713c2205253671a561fe5fb7c4c35d09be005dd52466c
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c45f3067a22aec2ce6042e662b58ca956f7c4bf0b9154698c91978128ffdb600
|
|
| MD5 |
e499aa515ee9765c533c17c6cf6e6d6b
|
|
| BLAKE2b-256 |
c4b43b9a43577a7bab55efa15f65c1a1d3b22f294c7591b552b1bd557105d33b
|