在Redis中,您可以使用Sorted Set(有序集合)數據結構來實現一個簡單的延遲隊列。以下是設置延遲隊列的步驟:
import time
import redis
# 連接到Redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 添加任務到延遲隊列
task_id = "task123"
execute_time = int(time.time()) + 10 # 假設任務在10秒后執行
r.zadd("delayed_queue", {task_id: execute_time})
import threading
def process_delayed_tasks():
while True:
# 獲取當前時間戳
current_time = int(time.time())
# 獲取并移除已超時的任務
expired_tasks = r.zrangebyscore("delayed_queue", 0, current_time)
for task in expired_tasks:
r.zrem("delayed_queue", task)
# 處理任務(例如,執行任務邏輯或調用其他函數)
print(f"Processing task: {task}")
# 啟動處理延遲任務的線程
process_thread = threading.Thread(target=process_delayed_tasks)
process_thread.start()
# 添加新任務到延遲隊列
new_task_id = "task456"
new_execute_time = int(time.time()) + 20 # 假設任務在20秒后執行
r.zadd("delayed_queue", {new_task_id: new_execute_time})
這樣,您就設置了一個簡單的基于Redis的延遲隊列。當任務的執行時間到達時,它們將自動從Sorted Set中移除并進行處理。請注意,這個實現是一個簡單的示例,實際應用中可能需要考慮更多的因素,例如錯誤處理、任務持久化等。