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脚本,开始获取消息

运行效果如下:

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