使用Redis构建任务队列

第1关:先进先出任务队列

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import redis

conn = redis.Redis()

# 将任务加入队列
def add_task(task_name):
    # 请在下面完成要求的功能
    #********* Begin *********#
    conn.rpush("task:list",task_name)
    #********* End *********#

# 获取一个任务
def pop_task():
    # 请在下面完成要求的功能
    #********* Begin *********#
    while True:
        task=conn.blpop("task:list",10)
        if not task:
            continue
        return task[1]


    #********* End *********#

第2关:优先级任务队列

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import redis

conn = redis.Redis()

# 新建任务队列/改变任务队列优先级
def add_task_list(list_name, priority):
    # 请在下面完成要求的功能
    #********* Begin *********#
    conn.zadd("task:priority",list_name,priority)
    #********* End *********#

# 将任务加入队列
def add_task(list_name, task_name):
    # 请在下面完成要求的功能
    #********* Begin *********#
    conn.rpush(list_name,task_name)
    #********* End *********#

# 获取一个任务
def pop_task():
    # 请在下面完成要求的功能
    #********* Begin *********#
    queues=conn.zrevrange("task:priority",0,-1)
    while True:
        task=conn.blpop(queues,10)
        if not task:
            continue
        return task[1]


    #********* End *********#

第3关:定时任务队列

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import time
import redis

conn = redis.Redis()

# 添加定时任务
def execute_later(task_name, delay=0):
    # 请在下面完成要求的功能
    #********* Begin *********#
    if delay>0:
        conn.zadd("task:delayed",task_name,time.time()+delay)
    else:
        conn.rpush("task:list",task_name)
    #********* End *********#

# 转移可执行任务
def pop_task():
    # 请在下面完成要求的功能
    #********* Begin *********#
    while True:
        task=conn.zrange("task:delayed",0,0,withscores=True)
        if not task or task[0][1] > time.time():
            time.sleep(0.01)
            continue
        task=task[0][0]
        if conn.zrem("task:delayed",task):
            conn.rpush("task:list",task)




    #********* End *********#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值