任务队列可以看作是消息队列的一种,只是其用于管理异步任务。任务队列有基本的在应用程序间传递,保持任务的功能。
本实训项目的主要内容是使用Redis分别构建先进先出任务队列,优先级任务队列和定时任务队列。
先进先出任务队列
#!/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 *********#
优先级任务队列
#!/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 *********#
定时任务队列
#!/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 *********#
!!!感谢大家的支持!!!记得点赞!!!!!