二维码生成器网站源码,wordpress4.7更新说明,wordpress 登录模板,ip下的网站吗文章目录 第1关#xff1a;先进先出任务队列第2关#xff1a;优先级任务队列第3关#xff1a;定时任务队列 第1关#xff1a;先进先出任务队列
编程要求 在Begin-End区域编写 add_task(task_name) 函数#xff0c;实现将任务加入队列的功能#xff0c;具体参数与要求如下… 文章目录 第1关先进先出任务队列第2关优先级任务队列第3关定时任务队列 第1关先进先出任务队列
编程要求 在Begin-End区域编写 add_task(task_name) 函数实现将任务加入队列的功能具体参数与要求如下
方法参数 task_name 是要加入的任务名称 推入任务的实现将新的任务从列表 task:list 的尾部插入。 编写 pop_task() 函数实现获取一个任务的功能具体参数与要求如下
获取任务的实现从列表 task:list 的头部阻塞式的弹出一个值最长等待10秒若超时仍未获取到则重试该操作直至弹出一个值 任务返回的实现获取任务成功后返回该值中弹出的元素值。 测试说明 平台会对你编写的代码进行测试
测试输入my_task 预期输出
测试 add_task 方法… 推入任务my_task 当前任务队列[‘my_task’] 测试 pop_task 方法… 出队列任务my_task 当前任务队列[] 在多线程下测试队列工作… 出队列任务new task 代码示例如下 #!/usr/bin/env python
#-*- coding:utf-8 -*-import redisconn 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:continuereturn task[1]#********* End *********#第2关优先级任务队列
编程要求 在Begin-End区域编写 add_task_list(list_name, priority) 函数实现设置任务队列优先级的功能具体参数与要求如下
方法参数 list_name 是要加入的任务队列名字priority 是要设置的优先权重值越大则级别越高 设置队列优先级的实现为了能按照优先权重排列任务队列将任务队列加入到有序集合 task:priority 中分值为 priority。 编写 add_task(list_name, task_name) 函数实现将任务加入队列的功能具体参数与要求如下
方法参数 list_name 是要加入的任务队列名字task_name 是要加入的任务名称 推入任务的实现将新的任务从指定的列表尾部插入。 编写 pop_task()函数实现获取一个任务的功能具体参数与要求如下
排序任务队列的实现将有序集合 task:priority 中的所有成员按照分值递减的顺序排列 获取任务的实现按照上述队列的顺序从第一个非空列表的头部阻塞式的弹出一个值最长等待10秒若超时仍未获取到则重试该操作直至弹出一个值 任务返回的实现获取任务成功后返回该值中弹出的元素值。 测试说明 平台会对你编写的代码进行测试
测试输入h,e,l,o,d,u,c,r 预期输出
测试 add_task_list 方法… 加入三个任务队列[‘task:list:high’, ‘task:list:mid’, ‘task:list:low’] 测试 add_task 方法… 推入任务h 到 task:list:high 推入任务e 到 task:list:mid 推入任务l 到 task:list:low 推入任务o 到 task:list:high 推入任务d 到 task:list:mid 推入任务u 到 task:list:low 推入任务c 到 task:list:high 推入任务r 到 task:list:mid 当前 task:list:high 任务队列[‘h’, ‘o’, ‘c’] 当前 task:list:mid 任务队列[‘e’, ‘d’, ‘r’] 当前 task:list:low 任务队列[‘l’, ‘u’] 测试 pop_task 方法… 出队列顺序[‘h’, ‘o’, ‘c’, ‘e’, ‘d’, ‘r’, ‘l’, ‘u’] 当前 task:list:high 任务队列[] 当前 task:list:mid 任务队列[] 当前 task:list:low 任务队列[] 在多线程下测试队列工作… 出队列任务new task 代码示例如下 #!/usr/bin/env python
#-*- coding:utf-8 -*-import redisconn 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 *********#while True:task conn.blpop(conn.zrevrange(task:priority,0,-1),10)if not task:continuereturn task[1]#********* End ********* 第3关定时任务队列
编程要求 在Begin-End区域编写 execute_later(task_name, delay0) 函数实现添加定时任务的功能具体参数与要求如下
方法参数 task_name 是要加入的任务名称delay 是任务的延迟时间 添加定时任务的实现若延迟时间大于0则将任务加入到有序集合 task:delayed 中分值为任务的执行时间等于当前时间戳加上延迟时间 添加普通任务的实现若延迟时间小于等于0则将其插入到列表task:list的尾部。 编写 pop_task() 函数实现转移可执行任务的功能具体参数与要求如下
获取队列中第一个任务的实现不断尝试获取有序集合task:delayed中按分值递增顺序的第一个元素 判断该任务是否可执行的实现若未取到任务或者任务的执行时间未到则休眠 0.01 秒然后继续尝试获取第一个任务 任务转移的实现从有序集合task:delayed中移除该任务成功后将该任务插入到列表task:list的尾部。 测试说明 平台会对你编写的代码进行测试
测试输入无 预期输出
测试 execute_later 方法… 添加任务task-0 ,延迟0 添加任务task-1 ,延迟0.5 添加任务task-2 ,延迟0 添加任务task-3 ,延迟1.5 普通任务队列长度2 定时执行任务队列内容[‘task-1’, ‘task-3’] 测试 pop_task 方法… 等待0.6秒后普通任务队列长度为3 普通任务队列内容为[‘task-0’, ‘task-2’, ‘task-1’] 等待1.6秒后普通任务队列长度为4 普通任务队列内容为[‘task-0’, ‘task-2’, ‘task-1’, ‘task-3’] 代码示例如下 #!/usr/bin/env python
#-*- coding:utf-8 -*-import time
import redisconn redis.Redis()# 添加定时任务
def execute_later(task_name, delay0):# 请在下面完成要求的功能#********* 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,withscoresTrue)if not task or task[0][1] time.time():time.sleep(0.01)continuetask task[0][0]if conn.zrem(task:delayed,task):conn.rpush(task:list,task) #********* End *********#