任務佇列可以看作是訊息佇列的一種,只是其用於管理非同步任務。任務佇列有基本的在應用程式間傳遞,保持任務的功能。
本實訓專案的主要內容是使用redis分別構建先進先出任務佇列,優先順序任務佇列和定時任務佇列。
先進先出任務佇列
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import redis
conn = redis.redis(
)# 將任務加入佇列
defadd_task
(task_name)
:# 請在下面完成要求的功能
#********* begin *********#
conn.rpush(
"task:list"
, task_name)
#********* end *********#
# 獲取乙個任務
defpop_task()
:# 請在下面完成要求的功能
#********* begin *********#
while
true
: task = conn.blpop(
"task:list",10
)ifnot task:
continue
return task[1]
#********* end *********#
優先順序任務佇列
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import redis
conn = redis.redis(
)# 新建任務佇列/改變任務佇列優先順序
defadd_task_list
(list_name, priority)
:# 請在下面完成要求的功能
#********* begin *********#
conn.zadd(
"task:priority"
, list_name, priority)
#********* end *********#
# 將任務加入佇列
defadd_task
(list_name, task_name)
:# 請在下面完成要求的功能
#********* begin *********#
conn.rpush(list_name, task_name)
#********* end *********#
# 獲取乙個任務
defpop_task()
:# 請在下面完成要求的功能
#********* begin *********#
queues = conn.zrevrange(
"task:priority",0
,-1)
while
true
: task = conn.blpop(queues,10)
ifnot task:
continue
return task[1]
#********* end *********#
定時任務佇列
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import time
import redis
conn = redis.redis(
)# 新增定時任務
defexecute_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 *********#
# 轉移可執行任務
defpop_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 *********#
!!!感謝大家的支援!!!記得點讚!!!!! redis 任務佇列
使用redis實現任務佇列 說到佇列很自然就能想到redis的列表型別,3.4.2節介紹了使用lpush和rpop命令實現佇列的概念。如果要實現任務佇列,只需要讓生產者將任務使用lpush命令加入到某個鍵中,另一邊讓消費者不斷地使用rpop命令從該鍵中取出任務即可。在小白的例子中,完成發郵件的任務需...
使用Redis實現任務佇列
使用redis實現任務佇列 說到佇列很自然就能想到redis的列表型別,3.4.2節介紹了使用lpush和rpop命令實現佇列的概念。如果要實現任務佇列,只需要讓生產者將任務使用lpush命令加入到某個鍵中,另一邊讓消費者不斷地使用rpop命令從該鍵中取出任務即可。在小白的例子中,完成發郵件的任務需...
基於redis構建訊息佇列
一般來說,訊息佇列有兩種場景 一種是發布者訂閱者模式 一種是生產者消費者模式。利用redis這兩種場景的訊息佇列都能夠實現。定義 1 redis作為訊息中介軟體 1 producer consumermode 該方式是借助redis的list結構實現的。producer呼叫redis的lpush往特...