環境:python3
庫:redis
首先得了解redis數據庫的lpush和brpop命令:
1.Redis Lpush 命令將一個或多個值插入到列表頭部。 如果 key 不存在,一個空列表會被創建並執行 LPUSH 操作。 當 key 存在但不是列表類型時,返回一個錯誤。
注意:在Redis 2.4版本以前的 LPUSH 命令,都只接受單個 value 值
2.Redis Brpop 命令移出並獲取列表的最後一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素爲止。
接下來我們寫三個腳本,
第一個是負責發佈任務的腳本,即不斷往redis存入消息
import redis
import json
import time
# 鏈接數據庫
redis_queue = redis.Redis(host='localhost', port=6379)
# 定義初始值a
a = 0
# 往redis存入{"number":a},其中a的值是遞增的,當a=100時,停止存入
while a != 100:
dic = {"number": a}
a += 1
print("開始存入{'number':%s}"%a)
redis_queue.lpush('somekey', json.dumps(dic))
# 休息0.5秒
time.sleep(0.5)
第二個和第三個腳本內容相同,功能是負責從redis獲取消息。
import redis
import time
# 鏈接數據庫
redis_queue = redis.Redis(host='localhost', port=6379 )
# 每隔一秒從列表中獲取消息
# 如果timeout=0,消息隊列爲空時,程序會一直阻塞
while True:
task=redis_queue.brpop('somekey',timeout=3)
if not task:
print("3秒內沒有獲取到消息,我要中斷循環了")
break
# 打印消息
print(task[1])
time.sleep(1)
我們先運行第一個發佈消息的腳本,效果如下:
接下來我們分別啓動2和3腳本,開始獲取消息
運行效果如下: