Python BackgroundScheduler中Interval、Cron及偏移量的使用方法

Python中interval和cron的使用方法
- apscheduler 庫 是 Python 中一個功能強大的定時任務(wù)庫。
 - interval 和 cron 是 apscheduler 庫中常用的兩種觸發(fā)器類型。
 - interval 觸發(fā)器 用于指定任務(wù)執(zhí)行的間隔時間。
 - cron 觸發(fā)器 用于指定任務(wù)執(zhí)行的時間表達式。
 
以下是 interval 和 cron 的使用方法:
1. interval 觸發(fā)器
示例:
from apscheduler.schedulers.background import BackgroundScheduler
def job1():
    logging.info(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))} 執(zhí)行')
# 創(chuàng)建調(diào)度器
scheduler = BackgroundScheduler()
# 添加定時任務(wù)
scheduler.add_job(job1, 'interval', seconds=3600)
# 啟動調(diào)度器
scheduler.start()以上代碼將每小時執(zhí)行一次 job1() 函數(shù)。
2. interval 偏移量
interval 觸發(fā)器 支持偏移量,用于指定任務(wù)執(zhí)行時間的隨機偏移量。
語法:
scheduler.add_job(func, 'interval', seconds=3600, jitter=3600)參數(shù):
- jitter: 偏移量
 
當(dāng)使用 BackgroundScheduler 的 add_job 方法時,可以通過 jitter 參數(shù)來添加偏移量,以增加任務(wù)執(zhí)行時間的隨機性。jitter 是一個可選參數(shù),用于指定任務(wù)執(zhí)行時間的隨機偏移范圍。
具體來說,jitter 參數(shù)允許你在指定的時間間隔內(nèi)隨機選擇一個偏移量,將它添加到任務(wù)的執(zhí)行時間上。這樣可以避免在同一時間執(zhí)行大量任務(wù),減輕系統(tǒng)負(fù)載和資源競爭。
示例:
from apscheduler.schedulers.background import BackgroundScheduler
def job1():
    logging.info(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))} 執(zhí)行')
# 創(chuàng)建調(diào)度器
scheduler = BackgroundScheduler()
# 添加定時任務(wù)
scheduler.add_job(job1, 'interval', seconds=3600, jitter=3600)
# 啟動調(diào)度器
scheduler.start()以上代碼使用 add_job 方法添加了一個任務(wù),并使用 interval 觸發(fā)器指定了任務(wù)的執(zhí)行方式。seconds=3600 表示任務(wù)將每隔 3600 秒(1 小時)執(zhí)行一次。jitter=3600 表示在每次任務(wù)執(zhí)行時間的基礎(chǔ)上,隨機選擇一個介于 -3600 和 3600 秒之間的偏移量。這樣,任務(wù)的實際執(zhí)行時間將在每小時的范圍內(nèi)有輕微的隨機變化。
通過使用 jitter 偏移量,可以避免多個任務(wù)在完全相同的時間點執(zhí)行,從而更好地分散任務(wù)負(fù)載并提高系統(tǒng)的可靠性和性能。
需要注意的是,jitter 偏移量的單位與觸發(fā)器中指定的時間間隔單位相同。在上述示例中,seconds=3600 表示時間間隔為秒,因此 jitter=3600 的單位也是秒。如果使用其他時間單位(如分鐘或小時),則偏移量應(yīng)相應(yīng)地進行調(diào)整。
總結(jié):jitter 偏移量允許你給任務(wù)的執(zhí)行時間添加一定的隨機性,以避免任務(wù)在完全相同的時間點執(zhí)行。通過在 add_job 方法中設(shè)置 jitter 參數(shù),你可以控制偏移量的范圍和單位,以滿足任務(wù)調(diào)度的需求。
3. cron 觸發(fā)器
示例:
from apscheduler.schedulers.background import BackgroundScheduler
def job1():
    logging.info(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))} 執(zhí)行')
# 創(chuàng)建調(diào)度器
scheduler = BackgroundScheduler()
# 添加定時任務(wù)
scheduler.add_job(job1, 'cron', hour='*')
# 啟動調(diào)度器
scheduler.start()以上代碼將在每小時的 00 分執(zhí)行一次 job1() 函數(shù)。
4.cron 時間表達式
cron 觸發(fā)器 支持時間表達式,用于指定任務(wù)執(zhí)行的時間。
時間表達式的格式:
分鐘 小時 天 月 星期每個字段可以使用以下值:
- *: 表示所有值
 - ,: 表示分隔符
 - -: 表示范圍
 - /: 表示間隔
 
示例:
from apscheduler.schedulers.background import BackgroundScheduler
def job1():
    logging.info(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))} 執(zhí)行')
# 創(chuàng)建調(diào)度器
scheduler = BackgroundScheduler()
# 添加定時任務(wù)
scheduler.add_job(job1, 'cron', hour='12', minute='30')
# 啟動調(diào)度器
scheduler.start()以上代碼將在12點的 30 分執(zhí)行一次 job1() 函數(shù)。















 
 
 







 
 
 
 