欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python定時(shí)任務(wù)框架APScheduler安裝使用詳解

 更新時(shí)間:2022年05月27日 11:25:23   作者:Yunlord  
這篇文章主要介紹了Python定時(shí)任務(wù)框架APScheduler安裝使用詳解,重點(diǎn)介紹如何使用APscheduler實(shí)現(xiàn)python定時(shí)任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)Python定時(shí)任務(wù)APScheduler相關(guān)知識(shí)感興趣的朋友一起看看吧

前言

在日常工作中,如果想要簡(jiǎn)化工作流程實(shí)現(xiàn)辦公自動(dòng)化,那么幾乎有大半的功能模塊都需要使用定時(shí)任務(wù),例如定時(shí)收發(fā)郵件,或者定時(shí)發(fā)微信或是檢測(cè)垃圾郵件等等,而在python中常用實(shí)現(xiàn)定時(shí)任務(wù)的包含以下四種方法:

  • while True: + sleep()
  • threading.Timer定時(shí)器
  • 調(diào)度模塊schedule
  • 任務(wù)框架APScheduler

但在實(shí)際測(cè)試中,可以發(fā)現(xiàn):

循環(huán)+sleep方式可以用來(lái)做簡(jiǎn)單測(cè)試。
timer可以實(shí)現(xiàn)異步定時(shí)任務(wù)。
schedule可以定點(diǎn)定時(shí)執(zhí)行,但是仍然需要while Ture配合,而且占用內(nèi)存大。
APScheduler框架更加強(qiáng)大,可以直接在里面添加定點(diǎn)與定時(shí)任務(wù),無(wú)可挑剔?。?!

所以接下來(lái)講介紹如何使用APscheduler實(shí)現(xiàn)python定時(shí)任務(wù)?。?!

一、APscheduler簡(jiǎn)介

APscheduler全稱Advanced Python Scheduler,作用為在指定的時(shí)間規(guī)則執(zhí)行指定的作業(yè),其是基于Quartz的一個(gè)Python定時(shí)任務(wù)框架,實(shí)現(xiàn)了Quartz的所有功能,使用起來(lái)十分方便。提供了基于日期、固定時(shí)間間隔以及crontab類型的任務(wù),并且可以持久化任務(wù)。基于這些功能,我們可以很方便的實(shí)現(xiàn)一個(gè)python定時(shí)任務(wù)系統(tǒng)。

二、APscheduler安裝

我們通過(guò)Anaconda管理虛擬環(huán)境,并進(jìn)行APscheduler庫(kù)的安裝。

pip install apscheduler

三、APscheduler組成部分

觸發(fā)器(trigger):包含調(diào)度邏輯,每一個(gè)作業(yè)有它自己的觸發(fā)器,用于決定接下來(lái)哪一個(gè)作業(yè)會(huì)運(yùn)行。除了他們自己初始配置意外,觸發(fā)器完全是無(wú)狀態(tài)的。

作業(yè)存儲(chǔ)(job store):存儲(chǔ)被調(diào)度的作業(yè),默認(rèn)的作業(yè)存儲(chǔ)是簡(jiǎn)單地把作業(yè)保存在內(nèi)存中,其他的作業(yè)存儲(chǔ)是將作業(yè)保存在數(shù)據(jù)庫(kù)中。一個(gè)作業(yè)的數(shù)據(jù)講在保存在持久化作業(yè)存儲(chǔ)時(shí)被序列化,并在加載時(shí)被反序列化。調(diào)度器不能分享同一個(gè)作業(yè)存儲(chǔ)。

執(zhí)行器(executor):處理作業(yè)的運(yùn)行,他們通常通過(guò)在作業(yè)中提交制定的可調(diào)用對(duì)象到一個(gè)線程或者進(jìn)城池來(lái)進(jìn)行。當(dāng)作業(yè)完成時(shí),執(zhí)行器將會(huì)通知調(diào)度器。

調(diào)度器(scheduler):其他的組成部分。通常在應(yīng)用只有一個(gè)調(diào)度器,應(yīng)用的開發(fā)者通常不會(huì)直接處理作業(yè)存儲(chǔ)、調(diào)度器和觸發(fā)器,相反,調(diào)度器提供了處理這些的合適的接口。配置作業(yè)存儲(chǔ)和執(zhí)行器可以在調(diào)度器中完成,例如添加、修改和移除作業(yè)?!?/p>

1.Job 作業(yè)

作用:

Job作為APScheduler最小執(zhí)行單位。
創(chuàng)建Job時(shí)指定執(zhí)行的函數(shù),函數(shù)中所需參數(shù),Job執(zhí)行時(shí)的一些設(shè)置信息。

構(gòu)建說(shuō)明:

id:指定作業(yè)的唯一ID
name:指定作業(yè)的名字
trigger:apscheduler定義的觸發(fā)器,用于確定Job的執(zhí)行時(shí)間,根據(jù)設(shè)置的trigger規(guī)則,計(jì)算得到下次執(zhí)行此job的
時(shí)間, 滿足時(shí)將會(huì)執(zhí)行
executor:apscheduler定義的執(zhí)行器,job創(chuàng)建時(shí)設(shè)置執(zhí)行器的名字,根據(jù)字符串你名字到scheduler獲取到執(zhí)行此
job的 執(zhí)行器,執(zhí)行job指定的函數(shù)
max_instances:執(zhí)行此job的最大實(shí)例數(shù),executor執(zhí)行job時(shí),根據(jù)job的id來(lái)計(jì)算執(zhí)行次數(shù),根據(jù)設(shè)置的最大實(shí)例數(shù)
來(lái)確定是否可執(zhí)行
next_run_time:Job下次的執(zhí)行時(shí)間,創(chuàng)建Job時(shí)可以指定一個(gè)時(shí)間[datetime],不指定的話則默認(rèn)根據(jù)trigger獲取觸
發(fā)時(shí)間
misfire_grace_time:Job的延遲執(zhí)行時(shí)間,例如Job的計(jì)劃執(zhí)行時(shí)間是21:00:00,但因服務(wù)重啟或其他原因?qū)е?br />21:00:31才執(zhí)行,如果設(shè)置此key為40,則該job會(huì)繼續(xù)執(zhí)行,否則將會(huì)丟棄此job
coalesce:Job是否合并執(zhí)行,是一個(gè)bool值。例如scheduler停止20s后重啟啟動(dòng),而job的觸發(fā)器設(shè)置為5s執(zhí)行
一次,因此此job錯(cuò)過(guò)了4個(gè)執(zhí)行時(shí)間,如果設(shè)置為是,則會(huì)合并到一次執(zhí)行,否則會(huì)逐個(gè)執(zhí)行
func:Job執(zhí)行的函數(shù)
args:Job執(zhí)行函數(shù)需要的位置參數(shù)
kwargs:Job執(zhí)行函數(shù)需要的關(guān)鍵字參數(shù)

2.Trigger 觸發(fā)器

包含調(diào)度邏輯,每一個(gè)作業(yè)有它自己的觸發(fā)器,用于決定接下來(lái)哪一個(gè)作業(yè)會(huì)運(yùn)行。除了它們自己初始配置以外,觸發(fā)器完全是無(wú)狀態(tài)的。

APScheduler 有三種內(nèi)建的 trigger:

  •  date: 特定的時(shí)間點(diǎn)觸發(fā)
  •  interval: 固定時(shí)間間隔觸發(fā) 
  • cron: 在特定時(shí)間周期性地觸發(fā)

觸發(fā)器就是根據(jù)你指定的觸發(fā)方式,比如是按照時(shí)間間隔,還是按照 crontab觸發(fā),觸發(fā)條件是什么等。每個(gè)任務(wù)都有自己的觸發(fā)器。

3.Jobstore 作業(yè)存儲(chǔ)

如果你的應(yīng)用在每次啟動(dòng)的時(shí)候都會(huì)重新創(chuàng)建作業(yè),那么使用默認(rèn)的作業(yè)存儲(chǔ)器(MemoryJobStore)即可,但是如果你需要在調(diào)度器重啟或者應(yīng)用程序奔潰的情況下任然保留作業(yè),你應(yīng)該根據(jù)你的應(yīng)用環(huán)境來(lái)選擇具體的作業(yè)存儲(chǔ)器。例如:使用Mongo或者SQLAlchemy JobStore (用于支持大多數(shù)RDBMS)。

任務(wù)存儲(chǔ)器是可以存儲(chǔ)任務(wù)的地方,默認(rèn)情況下任務(wù)保存在內(nèi)存,也可將任務(wù)保存在各種數(shù)據(jù)庫(kù)中。任務(wù)存儲(chǔ)進(jìn)去后,會(huì)進(jìn)行序列化,然后也可以反序列化提取出來(lái),繼續(xù)執(zhí)行。

4.Executor 執(zhí)行器

Executor在scheduler中初始化,另外也可通過(guò)scheduler的add_executor動(dòng)態(tài)添加Executor。 
每個(gè)executor都會(huì)綁定一個(gè)alias,這個(gè)作為唯一標(biāo)識(shí)綁定到Job,在實(shí)際執(zhí)行時(shí)會(huì)根據(jù)Job綁定的executor。找到實(shí)際的執(zhí)行器對(duì)象,然后根據(jù)執(zhí)行器對(duì)象執(zhí)行Job。

Executor的種類會(huì)根據(jù)不同的調(diào)度來(lái)選擇,如果選擇AsyncIO作為調(diào)度的庫(kù),那么選擇AsyncIOExecutor,如果選擇tornado作為調(diào)度的庫(kù),選擇TornadoExecutor,如果選擇啟動(dòng)進(jìn)程作為調(diào)度,選擇ThreadPoolExecutor或者ProcessPoolExecutor都可以。

Executor的選擇需要根據(jù)實(shí)際的scheduler來(lái)選擇不同的執(zhí)行器。

處理作業(yè)的運(yùn)行,它們通常通過(guò)在作業(yè)中提交制定的可調(diào)用對(duì)象到一個(gè)線程或者進(jìn)城池來(lái)進(jìn)行。當(dāng)作業(yè)完成時(shí),執(zhí)行器將會(huì)通知調(diào)度器。

5.scheduler 調(diào)度器

Scheduler是APScheduler的核心,所有相關(guān)組件通過(guò)其定義。scheduler啟動(dòng)之后,將開始按照配置的任務(wù)進(jìn)行調(diào)度。除了依據(jù)所有定義Job的trigger生成的將要調(diào)度時(shí)間喚醒調(diào)度之外。當(dāng)發(fā)生Job信息變更時(shí)也會(huì)觸發(fā)調(diào)度。

scheduler可根據(jù)自身的需求選擇不同的組件,如果是使用AsyncIO則選擇AsyncIOScheduler,使用tornado則選擇TornadoScheduler。

任務(wù)調(diào)度器是屬于整個(gè)調(diào)度的總指揮官。它會(huì)合理安排作業(yè)存儲(chǔ)器、執(zhí)行器、觸發(fā)器進(jìn)行工作,并進(jìn)行添加和刪除任務(wù)等。調(diào)度器通常是只有一個(gè)的。開發(fā)人員很少直接操作觸發(fā)器、存儲(chǔ)器、執(zhí)行器等。因?yàn)檫@些都由調(diào)度器自動(dòng)來(lái)實(shí)現(xiàn)了。

四、Scheduler工作流程圖

1.Scheduler添加job流程

2.Scheduler調(diào)度流程 

 

五、APscheduler使用

1.簡(jiǎn)單應(yīng)用

import time
from apscheduler.schedulers.blocking import BlockingScheduler
def my_job(i):
    print (i)
sched = BlockingScheduler()
sched.add_job(my_job, 'interval', seconds=5,values=['學(xué)會(huì)了'])
sched.start()

 輸出:

2.操作作業(yè)

2.1 date觸發(fā)器

date 是最基本的一種調(diào)度,作業(yè)任務(wù)只會(huì)執(zhí)行一次。它表示特定的時(shí)間點(diǎn)觸發(fā)。它的參數(shù)如下:

參數(shù)說(shuō)明
run_date(datetime or str)任務(wù)運(yùn)行的日期或者時(shí)間
timezone(datetime.tzinfo or str)指定時(shí)區(qū)
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
scheduler = BlockingScheduler()
def my_job(text):
    print(text)
# datetime類型(用于精確時(shí)間)
scheduler.add_job(my_job, 'date', run_date=datetime(2022, 4, 25, 17, 30, 5), args=['測(cè)試任務(wù)'])
 
scheduler.start()

注意:run_date參數(shù)可以是date類型、datetime類型或文本類型。

2.2 interval觸發(fā)器

固定時(shí)間間隔觸發(fā)。interval 間隔調(diào)度,參數(shù)如下:

參數(shù)說(shuō)明
weeks(int)間隔幾周
days(int)間隔幾天
hours(int)間隔幾小時(shí)
minutes(int)間隔幾分鐘
seconds(int)間隔多少秒
start_date(datetime or str)開始日期
end_date(datetime or str)結(jié)束日期
timezone(datetime.tzinfo or str)時(shí)區(qū)
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
def job_func():
     print("當(dāng)前時(shí)間:", datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")
scheduler = BlockingScheduler()
# 每2小時(shí)觸發(fā)
scheduler.add_job(job_func, 'interval', hours=2)
# 在 2019-04-15 17:00:00 ~ 2019-12-31 24:00:00 之間, 每隔兩分鐘執(zhí)行一次 job_func 方法
scheduler .add_job(job_func, 'interval', minutes=2, start_date='2022-04-29 17:00:00' , end_date='2022-12-31 24:00:00')
scheduler.start()

jitter振動(dòng)參數(shù),給每次觸發(fā)添加一個(gè)隨機(jī)浮動(dòng)秒數(shù),一般適用于多服務(wù)器,避免同時(shí)運(yùn)行造成服務(wù)擁堵。

# 每小時(shí)(上下浮動(dòng)120秒?yún)^(qū)間內(nèi))運(yùn)行`job_function`
scheduler.add_job(job_func, 'interval', hours=1, jitter=120)

 2.3 cron觸發(fā)器

在特定時(shí)間周期性地觸發(fā),和Linux crontab格式兼容。它是功能最強(qiáng)大的觸發(fā)器。

cron 參數(shù):

參數(shù)說(shuō)明
year(int or str)年,4位數(shù)字
month(int or str)月(范圍1-12)
day(int or str)日(范圍1-31)
week(int or str)周(范圍1-53)
day_of_week(int or str)周內(nèi)第幾天或者星期幾(范圍0-6或者mon,tue,wed,thu,fri,stat,sun)
hour(int or str)時(shí)(0-23)
minute(int or str)分(0-59)
second(int or str)秒(0-59)
start_date(datetime or str)最早開始日期(含)
end_date(datetime or str)最晚結(jié)束日期(含)
timezone(datetime.tzinfo or str)指定時(shí)區(qū)

表達(dá)式類型

表達(dá)式參數(shù)類型描述
*所有通配符。例:minutes=*即每分鐘觸發(fā)
*/a所有可被a整除的通配符。
a-b所有范圍a-b觸發(fā)
a-b/c所有范圍a-b,且可被c整除時(shí)觸發(fā)
xth y第幾個(gè)星期幾觸發(fā)。x為第幾個(gè),y為星期幾
last x一個(gè)月中,最后的星期幾觸發(fā)
last一個(gè)月最后一天觸發(fā)
x,y,z所有組合表達(dá)式,可以組合確定值或上方的表達(dá)式
import datetime
from apscheduler.schedulers.background import BackgroundScheduler
def job_func(text):
    print("當(dāng)前時(shí)間:", datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])
scheduler = BackgroundScheduler()
# 在每年 1-3、7-9 月份中的每個(gè)星期一、二中的 00:00, 01:00, 02:00 和 03:00 執(zhí)行 job_func 任務(wù)
scheduler .add_job(job_func, 'cron', month='1-3,7-9',day='0, tue', hour='0-3')
scheduler.start()

參考:

python定時(shí)任務(wù)最強(qiáng)框架APScheduler詳細(xì)教程

python 定時(shí)任務(wù)APScheduler 使用介紹 

Python定時(shí)庫(kù)APScheduler原理及用法

到此這篇關(guān)于Python定時(shí)任務(wù)框架APScheduler安裝使用詳解的文章就介紹到這了,更多相關(guān)Python定時(shí)任務(wù)APScheduler內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python列表嵌套引發(fā)的問(wèn)題總結(jié)

    python列表嵌套引發(fā)的問(wèn)題總結(jié)

    這篇文章主要介紹了python列表嵌套引發(fā)的問(wèn)題總結(jié),下面問(wèn)文章引發(fā)問(wèn)題來(lái)自日常工作總結(jié),具有一定的參考價(jià)值需要的小伙伴可以參考一下
    2022-05-05
  • Python自動(dòng)巡檢H3C交換機(jī)實(shí)現(xiàn)過(guò)程解析

    Python自動(dòng)巡檢H3C交換機(jī)實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Python自動(dòng)巡檢H3C交換機(jī)實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法分析

    Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法分析

    這篇文章主要介紹了Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法,結(jié)合實(shí)例形式分析了Beautiful Soup的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • 如何使用Python的Requests包實(shí)現(xiàn)模擬登陸

    如何使用Python的Requests包實(shí)現(xiàn)模擬登陸

    這篇文章主要為大家詳細(xì)介紹了使用Python的Requests包模擬登陸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 使用Python實(shí)現(xiàn)簡(jiǎn)單的爬蟲框架

    使用Python實(shí)現(xiàn)簡(jiǎn)單的爬蟲框架

    爬蟲是一種自動(dòng)獲取網(wǎng)頁(yè)內(nèi)容的程序,它可以幫助我們從網(wǎng)絡(luò)上快速收集大量信息。下面我們將學(xué)習(xí)如何使用 Python 編寫一個(gè)簡(jiǎn)單的爬蟲框架,感興趣的可以了解一下
    2023-05-05
  • 50行Python代碼實(shí)現(xiàn)人臉檢測(cè)功能

    50行Python代碼實(shí)現(xiàn)人臉檢測(cè)功能

    現(xiàn)在的人臉識(shí)別技術(shù)已經(jīng)得到了非常廣泛的應(yīng)用,支付領(lǐng)域、身份驗(yàn)證、美顏相機(jī)里都有它的應(yīng)用。下面小編給大家?guī)?lái)了基于50行Python代碼實(shí)現(xiàn)人臉檢測(cè)功能,一起看看吧
    2018-01-01
  • Python人工智能學(xué)習(xí)PyTorch實(shí)現(xiàn)WGAN示例詳解

    Python人工智能學(xué)習(xí)PyTorch實(shí)現(xiàn)WGAN示例詳解

    這篇文章主要為大家介紹了人工智能學(xué)習(xí)PyTorch實(shí)現(xiàn)WGAN的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Python+PyQt5+MySQL實(shí)現(xiàn)天氣管理系統(tǒng)

    Python+PyQt5+MySQL實(shí)現(xiàn)天氣管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python+PyQt5+MySQL實(shí)現(xiàn)天氣管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • python超詳細(xì)實(shí)現(xiàn)字體反爬流程

    python超詳細(xì)實(shí)現(xiàn)字體反爬流程

    大家好,本篇文章主要講的是python查策網(wǎng)字體反爬實(shí)例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-05-05
  • Python7個(gè)爬蟲小案例詳解(附源碼)中篇

    Python7個(gè)爬蟲小案例詳解(附源碼)中篇

    這篇文章主要介紹了Python7個(gè)爬蟲小案例詳解(附源碼)中篇,本文章內(nèi)容詳細(xì),通過(guò)案例可以更好的理解爬蟲的相關(guān)知識(shí),七個(gè)例子分為了三部分,本次為中篇,共有二道題,需要的朋友可以參考下
    2023-01-01

最新評(píng)論