1. 程式人生 > 實用技巧 >轉載——Python實現Reids任務佇列(簡單案例)

轉載——Python實現Reids任務佇列(簡單案例)

首先得了解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)

先執行第一個釋出訊息的指令碼.

來自:https://blog.csdn.net/t8116189520/article/details/91046746

—————————————————————————拓展—————————————————————————————————

http://doc.redisfans.com/list/lpush.html

https://www.runoob.com/redis/redis-lists.html

以上。