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, 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, andhigh_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
.
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.0.tar.gz
(10.5 kB
view details)
Built Distribution
redmq-0.2.0-py3-none-any.whl
(10.6 kB
view details)
File details
Details for the file redmq-0.2.0.tar.gz
.
File metadata
- Download URL: redmq-0.2.0.tar.gz
- Upload date:
- Size: 10.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f52cc9ae9a0fcd4f2a7166024180f4520749c81335a912851ca3ab46a2ab6f55 |
|
MD5 | 1632de56579a80d6734ecd4366560390 |
|
BLAKE2b-256 | 9c82a4bde67bbc4f93fba6b9d0528c4d79d698c5d142e11273297a70ea98b4cf |
File details
Details for the file redmq-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: redmq-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 97086534f28ef77735a8c94b7364c717e31f2a8ccd6521c086cc0b911225a387 |
|
MD5 | a23c419de5f8aeaf43047345c9a1f566 |
|
BLAKE2b-256 | b8b4c378762129c84dff818f7f006d734f09e7fc76b40e37ddb0f63da4a2aba1 |