Python實現Reids任務隊列(簡單案例)

環境: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腳本,開始獲取消息

運行效果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章