需求:訂單超時,如規定每個訂單建立後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命令黑白名單 黑名單示例 ...