redis延迟队列

任务需要延迟执行,可以先添加任务到redis zset类型,将到期时间写入score,任务写入member,再通过不断监听获取到期任务,删除后执行,redis是线程安全的,判断下删除状态为真执行即可

import time
import redis
import uuid

pool=redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)

r=redis.Redis(connection_pool=pool)

def delay_queue(name,delay:int):
    uid=str(uuid.uuid4())
    r.zadd('delay_queue',{name+uid:time.time()+delay})

delay_queue('任务一',3)
delay_queue('任务二',4)
delay_queue('任务三',2)
delay_queue('任务四',6)

def execute_queue():
    while 1:
        queue=r.zrangebyscore('delay_queue',0,time.time())
        if queue:
            name=queue[0]
            status=r.zrem('delay_queue',name)
            if status:
                print(f'开始执行任务:{name}')
                time.sleep(0.1)
                print(f'任务:{name} 执行结束')
        else:
            print('任务列表为空,等待1秒')
            time.sleep(1)
            continue

execute_queue()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值