使用Redis構建任務佇列

2021-10-10 18:11:38 字數 2738 閱讀 3434

任務佇列可以看作是訊息佇列的一種,只是其用於管理非同步任務。任務佇列有基本的在應用程式間傳遞,保持任務的功能。

本實訓專案的主要內容是使用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往特...