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

最新Python?APScheduler?定時任務(wù)詳解

 更新時間:2022年05月27日 11:13:24   作者:愛吃辣椒的鍋包肉  
這篇文章主要介紹了Python使用apscheduler模塊設(shè)置定時任務(wù),APScheduler全稱Advanced?Python?Scheduler?作用為在指定的時間規(guī)則執(zhí)行指定的作業(yè),本文對Python?APScheduler?定時任務(wù)相關(guān)知識介紹的非常詳細,需要的朋友參考下

一、基本概念

APScheduler全稱Advanced Python Scheduler 作用為在指定的時間規(guī)則執(zhí)行指定的作業(yè)。

  • 指定時間規(guī)則的方式可以是間隔多久執(zhí)行,可以是指定日期時間的執(zhí)行,也可以類似Linux系統(tǒng)中Crontab中的方式執(zhí)行任務(wù)。
  • 指定的任務(wù)就是一個Python函數(shù)。

1.1、 觸發(fā)器:triggers

用于設(shè)定觸發(fā)任務(wù)的條件: 觸發(fā)器包含調(diào)度邏輯。每個任務(wù)都有自己的觸發(fā)器,用于確定何時應(yīng)該運行作業(yè)。除了初始配置之外,觸發(fā)器完全是無狀態(tài)的

1.2、作業(yè)存儲器:job stores

用于存放任務(wù),把任務(wù)存放在內(nèi)存或數(shù)據(jù)庫中

  • 默認情況下,任務(wù)存放在內(nèi)存中。也可以配置存放在不同類型的數(shù)據(jù)庫中。如果任務(wù)存放在數(shù)據(jù)庫中,那么任務(wù)的存取有一個序列化和反序列化的過程,同時修改和搜索任務(wù)的功能也是由任務(wù)儲存器實現(xiàn)。
  • 注意一個任務(wù)儲存器不要共享給多個調(diào)度器,否則會導(dǎo)致狀態(tài)混亂

1.3、執(zhí)行器 executors

用于執(zhí)行任務(wù),可以設(shè)定執(zhí)行模式為單線程或線程池:任務(wù)會被執(zhí)行器放入線程池或進程池去執(zhí)行,執(zhí)行完畢后,執(zhí)行器會通知調(diào)度器。

1.4、調(diào)度器 schedulers

把上方三個組件作為參數(shù),通過創(chuàng)建調(diào)度器實例來運行:一個調(diào)度器由上方三個組件構(gòu)成,一般來說,一個程序只要有一個調(diào)度器就可以了。開發(fā)者也不必直接操作任務(wù)儲存器、執(zhí)行器以及觸發(fā)器,因為調(diào)度器提供了統(tǒng)一的接口,通過調(diào)度器就可以操作組件,比如任務(wù)的增刪改查。

在這里插入圖片描述

二、調(diào)度器詳解

  • BlockingScheduler : 阻塞式調(diào)度器:適用于只跑調(diào)度器的程序。
  • BackgroundScheduler: 后臺調(diào)度器:適用于非阻塞的情況,調(diào)度器會在后臺獨立運行
  • AsyncIOScheduler : AsyncIO調(diào)度器,適用于應(yīng)用使用AsnycIO的情況。
  • GeventScheduler : Gevent調(diào)度器,適用于應(yīng)用通過Gevent的情況。
  • TornadoScheduler: Tornado調(diào)度器,適用于構(gòu)建Tornado應(yīng)用。
  • TwistedScheduler:Twisted調(diào)度器,適用于構(gòu)建Twisted應(yīng)用。
  • QtScheduler: Qt調(diào)度器,適用于構(gòu)建Qt應(yīng)用。

2.1、APScheduler有三種內(nèi)置的觸發(fā)器

  • date:日期:觸發(fā)任務(wù)運行的具體日期
  • interval: 間隔:觸發(fā)任務(wù)運行的時間間隔
  • cron: 周期:觸發(fā)任務(wù)運行的周期

2.2、觸發(fā)器公共參數(shù)

  • id:啟動任務(wù)的ID具有唯一性
  • name: 設(shè)置啟動任務(wù)的名稱
  • coalesce :當(dāng)由于某種原因?qū)е履硞€job積攢了好幾次沒有實際運行(比如說系統(tǒng)掛了5分鐘后恢復(fù),有一個任務(wù)是每分鐘跑一次的,按道理說這5分鐘內(nèi)本來是“計劃”運行5次的,但實際沒有執(zhí)行),如果coalesce為True,下次這個job被submit給executor時,只會執(zhí)行1次,也就是最后這次,如果為False,那么會執(zhí)行5次(不一定,因為還有其他條件,看后面misfire_grace_time的解釋)
  • max_instance: 就是說同一個job同一時間最多有幾個實例再跑,比如一個耗時10分鐘的job,被指定每分鐘運行1次,如果我們max_instance值為5,那么在第6~10分鐘上,新的運行實例不會被執(zhí)行,因為已經(jīng)有5個實例在跑了
  • misfire_grace_time:設(shè)想和上述coalesce類似的場景,如果一個job本來14:00有一次執(zhí)行,但是由于某種原因沒有被調(diào)度上,現(xiàn)在14:01了,這個14:00的運行實例被提交時,會檢查它預(yù)訂運行的時間和當(dāng)下時間的差值(這里是1分鐘),大于我們設(shè)置的30秒限制,那么這個運行實例不會被執(zhí)行。
  • replace_existing: 如果調(diào)度的job在一個持久化的存儲器里,當(dāng)初始化應(yīng)用程序時,必須要為job定義一個顯示的ID并使用replace_existing=True, 否則每次應(yīng)用程序重啟時都會得到那個job的一個新副本

2.3、date內(nèi)置觸發(fā)器

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

參數(shù)說明
run_date (datetime 或 str)作業(yè)的運行日期或時間
timezone (datetime.tzinfo 或 str)指定時區(qū)
from datetime import datetime
from datetime import date
from apscheduler.schedulers.blocking import BlockingScheduler
def job(text):
    print(text)
scheduler = BlockingScheduler()
# 在 2019-8-30 運行一次 job 方法
scheduler.add_job(job, 'date', run_date=date(2022, 4, 9), args=['text1'], id="1", coalesce=True, max_instances=1)
# 在 2019-8-30 01:00:00 運行一次 job 方法
scheduler.add_job(job, 'date', run_date=datetime(2022, 4, 9, 17, 40, 58), args=['text2'], id="2", coalesce=True, max_instances=1)
# 在 2019-8-30 01:00:01 運行一次 job 方法
scheduler.add_job(job, 'date', run_date='2022-4-9 17:41:00', args=['text3'], id="3", coalesce=True, max_instances=1)
scheduler.start()

2.4、interval 周期觸發(fā)任務(wù)

參數(shù)說明
weeks (int)間隔幾周
days (int)間隔幾天
hours (int)間隔幾小時
minutes (int)間隔幾分鐘
seconds (int)間隔多少秒
start_date (datetime 或 str)開始日期
end_date (datetime 或 str)結(jié)束日期
timezone (datetime.tzinfo 或str)時區(qū)
@sched.scheduled_job(
    "interval", id=spider_job_name + "_bg_data", coalesce=True, max_instances=1, minutes=20
)
def tick_rzjg_detail_xq():
    """
    快速完成
    :return:
    """
    each = "rzjg_bg_data"
    cmd_str = f"cd {ROOT} && bash run_spider.sh {each} --loglevel=INFO"
    print(cmd_str)
    os.system(cmd_str)
def func():
    print("Press Ctrl+C to exit")
    # 直接觸發(fā)一次
    tick_rzjg_detail_xq()
    try:
        sched.start()
    except (KeyboardInterrupt, SystemExit):
        pass

if __name__ == "__main__":
    func()

2.5、cron 觸發(fā)器 在特定時間周期性地觸發(fā),和Linux crontab格式兼容。

它是功能最強大的觸發(fā)器

參數(shù)說明
year (int 或 str) 年,4位數(shù)字
month (int 或 str)月 (范圍1-12)
day (int 或 str)日 (范圍1-31)
week (int 或 str) 周 (范圍1-53)
day_of_week (int 或 str) 周內(nèi)第幾天或者星期幾 (范圍0-6 或者 mon,tue,wed,thu,fri,sat,sun)
hour (int 或 str) 時 (范圍0-23)
minute (int 或 str)分 (范圍0-59)
second (int 或 str) 秒 (范圍0-59)
start_date (datetime 或 str)最早開始日期(包含)
end_date (datetime 或 str)最晚結(jié)束時間(包含)
timezone (datetime.tzinfo 或str)指定時區(qū)
表達式參數(shù)類型描述
*所有通配符。例:minutes=*即每分鐘觸發(fā)
*/a所有可被a整除的通配符
a-b所有范圍a-b觸發(fā)
a-b/c所有范圍a-b,且可被c整除時觸發(fā)
xth y第幾個星期幾觸發(fā)。x為第幾個,y為星期幾
last x一個月中,最后個星期幾觸發(fā)
last一個月最后一天觸發(fā)
x,y,z所有組合表達式,可以組合確定值或上方的表達式
 import time
    from apscheduler.schedulers.blocking import BlockingScheduler

    def job(text):
        t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        print('{} --- {}'.format(text, t))

    scheduler = BlockingScheduler()
    # 在每天22點,每隔 1分鐘 運行一次 job 方法
    scheduler.add_job(job, 'cron', hour=22, minute='*/1', args=['job1'])
    # 在每天22和23點的25分,運行一次 job 方法
    scheduler.add_job(job, 'cron', hour='22-23', minute='25', args=['job2'])
    # 在每天 8 點,運行一次 job 方法
    scheduler.add_job(job, 'cron', hour='8', args=['job2'])
    # 在每天 8 點 20點,各運行一次 job 方法    設(shè)置最大運行實例數(shù)
    scheduler.add_job(job, 'cron', hour='8, 20', minute=30, max_instances=4)
    scheduler.start()

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

相關(guān)文章

  • Python Pandas處理csv文件常用示例

    Python Pandas處理csv文件常用示例

    Pandas是一個非常強大的數(shù)據(jù)操作python包,支持各種數(shù)據(jù)格式,包括CSV文件,本文就來介紹一下Python Pandas處理csv文件常用示例,感興趣的可以了解一下
    2023-12-12
  • python中的GUI實現(xiàn)計算器

    python中的GUI實現(xiàn)計算器

    這篇文章主要介紹了如何利用python中的GUI實現(xiàn)計算器,文章教大家用用python的GUI做界面布局,計算器代碼熟悉控件的使用方法、優(yōu)化計算器代碼,解決獲取按鈕文本的方法,具有一定的參考價值,需要的朋友可以參考一下
    2021-12-12
  • 跟老齊學(xué)Python之讓人歡喜讓人憂的迭代

    跟老齊學(xué)Python之讓人歡喜讓人憂的迭代

    跟一些比較牛X的程序員交流,經(jīng)常聽到他們嘴里冒出一個不標(biāo)準(zhǔn)的英文單詞,而loop、iterate、traversal和recursion如果不在其內(nèi),總覺得他還不夠牛X。當(dāng)讓,真正牛X的絕對不會這么說的,他們只是說“循環(huán)、迭代、遍歷、遞歸”,然后再問“這個你懂嗎?”。
    2014-10-10
  • PyQt5之基礎(chǔ)框架解讀

    PyQt5之基礎(chǔ)框架解讀

    這篇文章主要介紹了PyQt5之基礎(chǔ)框架,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Windows下Anaconda的安裝和簡單使用方法

    Windows下Anaconda的安裝和簡單使用方法

    這篇文章主要介紹了Windows下Anaconda的安裝和簡單使用方法,需要的朋友可以參考下
    2018-01-01
  • 使用Python根據(jù)一個列表的順序?qū)ζ渌斜磉M行排序

    使用Python根據(jù)一個列表的順序?qū)ζ渌斜磉M行排序

    這篇文章主要介紹了使用Python根據(jù)一個列表的順序?qū)ζ渌斜磉M行排序,根據(jù)列表B中每個元素的下標(biāo)來獲取列表A中對應(yīng)位置的元素,將其作為排序依據(jù)即可,需要的朋友可以參考下
    2023-10-10
  • 詳解如何設(shè)置Python環(huán)境變量?

    詳解如何設(shè)置Python環(huán)境變量?

    這篇文章主要介紹了如何設(shè)置Python環(huán)境變量?,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 利用python代碼寫的12306訂票代碼

    利用python代碼寫的12306訂票代碼

    這篇文章主要介紹了利用python代碼寫的12306訂票代碼,自己寫的python代碼,是非常實用的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-12-12
  • 解決Python訪問MySQL數(shù)據(jù)庫速度慢的問題

    解決Python訪問MySQL數(shù)據(jù)庫速度慢的問題

    這篇文章主要介紹了解決Python訪問MySQL數(shù)據(jù)庫速度慢的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 常見的python正則用法實例講解

    常見的python正則用法實例講解

    這篇文章為大家詳細主要介紹了常見的python正則用法實例,列舉Python正則表達式的幾種匹配用法,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評論