第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 *********#