使用apscheduler實現定時


一、介紹:
APScheduler的全稱是Advanced Python Scheduler。它是一個輕量級的 Python 定時任務調度框架。APScheduler 支持三種調度任務:固定時間間隔,固定時間點(日期),Linux 下的 Crontab 命令。同時,它還支持異步執行、后台執行調度任務。

二、安裝:
pip install apscheduler

三、基本概念
1. APScheduler四大組件:
觸發器 triggers :用於設定觸發任務的條件
任務儲存器 job stores:用於存放任務,把任務存放在內存或數據庫中
執行器 executors: 用於執行任務,可以設定執行模式為單線程或線程池
調度器 schedulers: 把上方三個組件作為參數,通過創建調度器實例來運行
1.1 觸發器 triggers
觸發器包含調度邏輯。每個任務都有自己的觸發器,用於確定何時應該運行作業。除了初始配置之外,觸發器完全是無狀態的。

1.2 任務儲存器 job stores
默認情況下,任務存放在內存中。也可以配置存放在不同類型的數據庫中。如果任務存放在數據庫中,那么任務的存取有一個序列化和反序列化的過程,同時修改和搜索任務的功能也是由任務儲存器實現。
注意一個任務儲存器不要共享給多個調度器,否則會導致狀態混亂

1.3 執行器 executors
任務會被執行器放入線程池或進程池去執行,執行完畢后,執行器會通知調度器。

1.4 調度器 schedulers
一個調度器由上方三個組件構成,一般來說,一個程序只要有一個調度器就可以了。開發者也不必直接操作任務儲存器、執行器以及觸發器,因為調度器提供了統一的接口,通過調度器就可以操作組件,比如任務的增刪改查

 

2. APScheduler有三種內置的觸發器:
date 日期:觸發任務運行的具體日期
interval 間隔:觸發任務運行的時間間隔
cron 周期:觸發任務運行的周期
calendarinterval:當您想要在一天中的特定時間以日歷為基礎的間隔運行任務時使用
一個任務也可以設定多種觸發器,比如,可以設定同時滿足所有觸發器條件而觸發,或者滿足一項即觸發。

2.1 date 是最基本的一種調度,作業任務只會執行一次。它表示特定的時間點觸發。它的參數如下:
參數 說明
run_date(datetime or str) 任務運行的日期或者時間
timezone(datetime.tzinfo or str) 指定時區

代碼:
from apscheduler.schedulers.blocking import BlockingScheduler
#創建執行的scheduler
scheduler = BlockingScheduler()
def works():
print(1111)
scheduler.add_job(works,'data',run_date=datetime.datetime(2020,12,4,15,54,0))#定時運行,只運行一次
scheduler.start()#啟動scheduler


2.2 interval 周期觸發任務
固定時間間隔觸發。interval 間隔調度,參數如下:
參數 說明
weeks(int) 間隔幾周
days(int) 間隔幾天
hours(int) 間隔幾小時
minutes(int) 間隔幾分鍾
seconds(int) 間隔多少秒
start_date(datetime or str) 開始日期
end_date(datetime or str) 結束日期
timezone(datetime.tzinfo or str) 時區

代碼:
from apscheduler.schedulers.blocking import BlockingScheduler
#創建執行的scheduler
scheduler = BlockingScheduler()
def works():
print(1111)
#interval觸發器,固定時間間隔觸發,每兩秒運行一次
scheduler.add_job(works, 'interval', seconds=2)
scheduler.start()#啟動scheduler


2.3 cron 觸發器
在特定時間周期性地觸發,和Linux crontab格式兼容。它是功能最強大的觸發器。
cron 參數:
參數 說明
year(int or str) 年,4位數字
month(int or str) 月(范圍1-12)
day(int or str) 日(范圍1-31)
week(int or str) 周(范圍1-53)
day_of_week(int or str) 周內第幾天或者星期幾(范圍0-6或者mon,tue,wed,thu,fri,stat,sun)
hour(int or str) 時(0-23)
minute(int or str) 分(0-59)
second(int or str) 秒(0-59)
start_date(datetime or str) 最早開始日期(含)
end_date(datetime or str) 最晚結束日期(含)
timezone(datetime.tzinfo or str) 指定時區

代碼:
from apscheduler.schedulers.blocking import BlockingScheduler
#創建后台執行的scheduler
scheduler = BlockingScheduler()
def works():
print(1111)
#interval觸發器,固定時間間隔觸發,每兩秒運行一次
scheduler.add_job(works,'cron',day_of_week='1,3,6',hour='6',minute='30')
scheduler.start()#啟動scheduler

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM