思想 延遲任務 定時任務,多久之後幹一件事

2022-06-11 09:27:11 字數 2780 閱讀 5160

需求:訂單超時,如規定每個訂單建立後1小時未處理,就超時

lock = 訂單建立時間 + 1h

from threading import timer

def delayed(seconds):

def decorator(f):

t = timer(seconds, f, args, kargs)

t.start()

return decorator

@delayed(3)

def xiaorui():

print "xiaorui.cc"

for i in range(10):

xiaorui()

建立乙個環形佇列一共為3600格,每格里是乙個任務集合set(task)

建立乙個timer,設定乙個指標,預設current_index=1 ,指向佇列的第乙個格仔,每一秒向後面走一格

任務集合包括3個引數,物件(訂單號),cycle_num(圈數),任務函式

執行流程:

current_index 不斷的走,每秒移動到乙個新的格仔,對應乙個任務集合,通過set的判斷cycle_num值是否為0執行不同的操作

如: 訂單建立時間,2小時後超時,即表示7200秒後執行超時任務

cycle_num = 7200%3600 = 2

如果為0, 表示task馬上快要執行了,取出任務函式來執行(開啟乙個執行緒執行),並刪除任務set

如果不為0,表示還要轉圈,將cycle_num的值-1 即可

佇列的儲存結構中使用的最多的是迴圈佇列。迴圈佇列包括兩個指標, front 指標指向隊頭元素, rear 指標指向隊尾元素的下乙個位置。

隊列為空的判斷條件是:

front == rear

佇列滿的判斷條件是

(rear+1)%maxsize == front

佇列長度的計算公式:

(rear-front+maxsize)%maxsize

正常情況下當front == rear是佇列有可能是滿也有可能是空,為了區分這兩種情況 我們需要在front前新增乙個閒置單元。

定時任務和延遲任務

crontab u 使用者 e 這個命令編輯的檔案是 var spool cron 使用者 每分鐘 分鐘 小時 天 月 周 2 每兩分鐘 08 17 每天早上8點 下午5點每分鐘 08 17 1,15 每月1號和15,早上8 下午5 每分鐘 08 17 1,15 3 三月的1號和三月的15,早上8 ...

十六 linux系統定時任務和延遲任務

一 系統延時任務 1 系統任務定時 root localhost at 23 37 設定任務執行時間 at rm fr mnt 任務動作 at ctrl d 用ctrl d發起任務 2 系統任務延遲 root localhost at now 1min 延時任務1分鐘 at rm fr mnt at...

Linux運維學習 定時任務及延遲任務

1.at命令 at命令可以指定某一任務在將來的特定時間執行 2.命令用法 at 18 09 at 定時任務命令 at l 檢視定時任務 at c 任務號 檢視任務詳細資訊 at r 任務號 取消定時任務 at now 1min at 延時任務命令 一分鐘後執行任務 3.at命令黑白名單 黑名單示例 ...