Python定時(shí)任務(wù)APScheduler原理及實(shí)例解析
定時(shí)任務(wù):
1、 線程睡眠函數(shù) sleep() ——粗暴!一直占有 CPU 資源,導(dǎo)致后續(xù)操作無(wú)法執(zhí)行
2、 threading.Timer(10, task, ()).start() # (間隔s,任務(wù)task, 函參)
3、 import sched
# 初始化 sched 模塊的 scheduler 類(lèi) scheduler = sched.scheduler(time.time, time.sleep) # 增加調(diào)度任務(wù) enter(delay, priority, action, argument=(), kwargs={}) scheduler.enter(10, 1, task) # 運(yùn)行任務(wù) scheduler.run()
scheduler 中的每個(gè)調(diào)度任務(wù)只會(huì)工作一次,不會(huì)無(wú)限循環(huán)被調(diào)用。如果想重復(fù)執(zhí)行同一任務(wù), 需要重復(fù)添加調(diào)度任務(wù)即可。
- enter(delay, priority, action, argument=(), kwargs={}) 間隔執(zhí)行任務(wù)。delay單位是秒。priority越小優(yōu)先級(jí)越大。兩個(gè)任務(wù)指定相同的延遲時(shí)間,優(yōu)先級(jí)大的任務(wù)會(huì)向被執(zhí)行。action 即需要執(zhí)行的函數(shù),argument 和 kwargs 分別是函數(shù)的位置和關(guān)鍵字參數(shù)。
- scheduler.enterabs(time, priority, action, argument=(), kwargs={}) 時(shí)間點(diǎn)執(zhí)行任務(wù)。因此,time是絕對(duì)時(shí)間.其他參數(shù)用法與 enter() 中的參數(shù)用法是一致。
APScheduler——Advanced Python Scheduler。
一個(gè)輕量級(jí)的 Python 定時(shí)任務(wù)調(diào)度框架。APScheduler 支持三種調(diào)度任務(wù):固定時(shí)間間隔,固定時(shí)間點(diǎn)(日期),Linux下Crontab 命令。同時(shí),它還支持異步執(zhí)行、后臺(tái)執(zhí)行調(diào)度任務(wù)。
import datetime import time from apscheduler.schedulers.background import BackgroundScheduler def timedTask(): print(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]) if __name__ == '__main__': # 1.創(chuàng)建后臺(tái)執(zhí)行的 schedulers scheduler = BackgroundScheduler() # 2.添加調(diào)度任務(wù),調(diào)度方法為 timedTask,觸發(fā)器選擇 interval(間隔性),間隔時(shí)長(zhǎng)為 2 秒 job = scheduler.add_job(timedTask, 'interval', seconds=2) # 3.啟動(dòng)調(diào)度任務(wù) scheduler.start() while True: print(time.time()) time.sleep(5)
基礎(chǔ)組件
- schedulers(調(diào)度器)它是任務(wù)調(diào)度器,屬于控制器角色。它配置作業(yè)存儲(chǔ)器和執(zhí)行器可以在調(diào)度器中完成,例如添加、修改和移除作業(yè)。
- BlockingScheduler : 調(diào)度器在當(dāng)前進(jìn)程的主線程中運(yùn)行,也就是會(huì)阻塞當(dāng)前線程。
- BackgroundScheduler : 調(diào)度器在后臺(tái)線程中運(yùn)行,不會(huì)阻塞當(dāng)前線程。
- AsyncIOScheduler : 結(jié)合 asyncio 模塊(一個(gè)異步框架)一起使用。
- GeventScheduler : 程序中使用 gevent(高性能的Python并發(fā)框架)作為IO模型,和 GeventExecutor 配合使用。
- TornadoScheduler : 程序中使用 Tornado(一個(gè)web框架)的IO模型,用 ioloop.add_timeout 完成定時(shí)喚醒。
- TwistedScheduler : 配合 TwistedExecutor,用 reactor.callLater 完成定時(shí)喚醒。
- QtScheduler : 你的應(yīng)用是一個(gè) Qt 應(yīng)用,需使用QTimer完成定時(shí)喚醒。
- triggers(觸發(fā)器)描述調(diào)度任務(wù)被觸發(fā)的條件。不過(guò)觸發(fā)器完全是無(wú)狀態(tài)的。
- date 時(shí)間點(diǎn)觸發(fā): scheduler .add_job(job_func, 'date', run_date=datetime(2017, 12, 13, 14, 0, 0), args=['text'])
- interval 固定時(shí)間間隔觸發(fā): scheduler .add_job(job_func, 'interval', minutes=2, start_date='2017-12-13 14:00:01' , end_date='2017-12-13 14:00:10')
- cron 特定時(shí)間周期性地觸發(fā): scheduler .add_job(job_func, 'cron', month='1-3,7-9',day='0, tue', hour='0-3')
- job stores(作業(yè)存儲(chǔ)器)任務(wù)持久化倉(cāng)庫(kù),默認(rèn)保存任務(wù)在內(nèi)存中,也可將任務(wù)保存都各種數(shù)據(jù)庫(kù)中,任務(wù)中的數(shù)據(jù)序列化后保存到持久化數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)加載后又反序列化。
- 有兩種添加方法,一是 add_job(), 二是scheduled_job()修飾器來(lái)修飾函數(shù)。區(qū)別是:第一種方法返回一個(gè) apscheduler.job.Job 的實(shí)例,可用來(lái)改變或移除 job。第二種方法只適用于應(yīng)用運(yùn)行期間不會(huì)改變的 job。
- 移除 job 也有兩種方法:remove_job() 和 job.remove()。
- remove_job() 是根據(jù) job 的 id 來(lái)移除,所以要在 job 創(chuàng)建時(shí)指定一個(gè) id。job.remove() 則是對(duì) job 執(zhí)行 remove 方法即可。
- 獲取 job 列表:通過(guò) scheduler.get_jobs() 方法能夠獲取當(dāng)前調(diào)度器中的所有 job 的列表。
- 修改job: 用Job.modify() 或 modify_job()方法來(lái)修改 job 的屬性。但注意job 的 id 是無(wú)法被修改的。
- 關(guān)閉 job:默認(rèn)情況下調(diào)度器會(huì)等待所有正在運(yùn)行的作業(yè)完成后,關(guān)閉所有的調(diào)度器和作業(yè)存儲(chǔ)。如果你不想等待,可以將 wait 選項(xiàng)設(shè)置為 False。
- 更新任務(wù)reschedule_job()
- executors(執(zhí)行器)負(fù)責(zé)處理作業(yè)的運(yùn)行,它們通常通過(guò)在作業(yè)中提交指定的可調(diào)用對(duì)象到一個(gè)線程或進(jìn)城池來(lái)進(jìn)行。當(dāng)作業(yè)完成時(shí),執(zhí)行器將會(huì)通知調(diào)度器。最常用的 executor 有兩種:ProcessPoolExecutor 和 ThreadPoolExecutor
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python定時(shí)任務(wù)apscheduler的詳細(xì)使用教程
- Python定時(shí)任務(wù)框架APScheduler原理及常用代碼
- Python定時(shí)任務(wù)APScheduler安裝及使用解析
- Python使用APScheduler實(shí)現(xiàn)定時(shí)任務(wù)過(guò)程解析
- Python定時(shí)任務(wù)工具之APScheduler使用方式
- Python定時(shí)任務(wù)APScheduler的實(shí)例實(shí)例詳解
- Python中定時(shí)任務(wù)框架APScheduler的快速入門(mén)指南
- Python使用apscheduler模塊設(shè)置定時(shí)任務(wù)的實(shí)現(xiàn)
相關(guān)文章
python?pandas?數(shù)據(jù)排序的幾種常用方法
這篇文章主要介紹了python?pandas數(shù)據(jù)排序的幾種常用方法,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09Sanic框架請(qǐng)求與響應(yīng)實(shí)例分析
這篇文章主要介紹了Sanic框架請(qǐng)求與響應(yīng),結(jié)合實(shí)例形式詳細(xì)分析了Sanic框架請(qǐng)求與相應(yīng)的相關(guān)參數(shù)、方法及使用技巧,需要的朋友可以參考下2018-07-07Python DataFrame實(shí)現(xiàn)固定周期內(nèi)統(tǒng)計(jì)每列的非零值
在數(shù)據(jù)處理中,使用DataFrame統(tǒng)計(jì)固定周期內(nèi)每列的非零值數(shù)量是一種常見(jiàn)需求,通過(guò)將數(shù)據(jù)分組并使用計(jì)數(shù)函數(shù),可以方便地實(shí)現(xiàn)此目標(biāo),具體方法包括首先計(jì)算每列的0值個(gè)數(shù),然后通過(guò)總數(shù)減去0值個(gè)數(shù)得到非零值的數(shù)量2024-09-09Swin?Transformer圖像處理深度學(xué)習(xí)模型
這篇文章主要為大家介紹了Swin?Transformer圖像處理深度學(xué)習(xí)模型詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03matplotlib繪制雷達(dá)圖的基本配置(萬(wàn)能模板案例)
本文主要介紹了matplotlib繪制雷達(dá)圖的基本配置(萬(wàn)能模板案例),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04python接口自動(dòng)化之ConfigParser配置文件的使用詳解
這篇文章主要介紹了python接口自動(dòng)化之ConfigParser配置文件的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Python基礎(chǔ)語(yǔ)法之變量與數(shù)據(jù)類(lèi)型詳解
這篇文章主要為大家詳細(xì)介紹了Python基礎(chǔ)語(yǔ)法中變量與數(shù)據(jù)類(lèi)型的用法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的可以了解一下2022-07-07PyQt5實(shí)現(xiàn)讓QScrollArea支持鼠標(biāo)拖動(dòng)的操作方法
今天小編就為大家分享一篇PyQt5實(shí)現(xiàn)讓QScrollArea支持鼠標(biāo)拖動(dòng)的操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Django Serializer HiddenField隱藏字段實(shí)例
這篇文章主要介紹了Django Serializer HiddenField隱藏字段實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03