Python实现Reids任务队列(简单案例)

  • Post author:
  • Post category:python



环境:

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


运行效果如下:



版权声明:本文为t8116189520原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。