最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python輕量級定時任務調(diào)度APScheduler的使用

 更新時間:2024年02月05日 16:01:03   作者:真·skysys  
Apscheduler是一個基于Quartz的python定時任務框架,本文主要介紹了Python輕量級定時任務調(diào)度APScheduler的使用,具有一定的參考價值,感興趣的可以了解一下

簡述

APscheduler (Advanced Python Scheduler),作用為按指定的時間規(guī)則執(zhí)行指定的作業(yè)。提供了基于日期date、固定時間間隔interval 、以及類似于Linux上的定時任務crontab類型的定時任務。該框架不僅可以添加、刪除定時任務,還可以將任務存儲到數(shù)據(jù)庫中,實現(xiàn)任務的持久化。

pip install apscheduler

APScheduler 有四種組件及相關說明:
1) triggers(觸發(fā)器):觸發(fā)器包含調(diào)度邏輯,每一個作業(yè)有它自己的觸發(fā)器,用于決定接下來哪一個作業(yè)會運行,除了他們自己初始化配置外,觸發(fā)器完全是無狀態(tài)的。
2)job stores(作業(yè)存儲):用來存儲被調(diào)度的作業(yè),默認的作業(yè)存儲器是簡單地把作業(yè)任務保存在內(nèi)存中,其它作業(yè)存儲器可以將任務作業(yè)保存到各種數(shù)據(jù)庫中,支持MongoDB、Redis、SQLAlchemy 存儲方式。當對作業(yè)任務進行持久化存儲的時候,作業(yè)的數(shù)據(jù)將被序列化,重新讀取作業(yè)時在反序列化。
3) executors(執(zhí)行器):執(zhí)行器用來執(zhí)行定時任務,只是將需要執(zhí)行的任務放在新的線程或者線程池中運行。當作業(yè)任務完成時,執(zhí)行器將會通知調(diào)度器。對于執(zhí)行器,默認情況下選擇ThreadPoolExecutor就可以了,但是如果涉及到一下特殊任務如比較消耗CPU的任務則可以選擇ProcessPoolExecutor,當然根據(jù)根據(jù)實際需求可以同時使用兩種執(zhí)行器。
4) schedulers(調(diào)度器):調(diào)度器是將其它部分聯(lián)系在一起,一般在應用程序中只有一個調(diào)度器,應用開發(fā)者不會直接操作觸發(fā)器、任務存儲以及執(zhí)行器,相反調(diào)度器提供了處理的接口。通過調(diào)度器完成任務的存儲以及執(zhí)行器的配置操作,如可以添加。修改、移除任務作業(yè)。

APScheduler提供了多種調(diào)度器,可以根據(jù)具體需求來選擇合適的調(diào)度器,常用的調(diào)度器有:

  • BlockingScheduler:適合于只在進程中運行單個任務的情況,通常在調(diào)度器是你唯一要運行的東西時使用。
  • BackgroundScheduler: 適合于要求任何在程序后臺運行的情況,當希望調(diào)度器在應用后臺執(zhí)行時使用。
  • AsyncIOScheduler:適合于使用 asyncio 框架的情況
  • GeventScheduler: 適合于使用gevent框架的情況
  • TornadoScheduler: 適合于使用 Tornado 框架的應用
  • TwistedScheduler: 適合使用Twisted框架的應用
  • QtScheduler: 適合使用QT的情況

例子

定時執(zhí)行函數(shù)test_job,每隔5秒鐘執(zhí)行一次

from apscheduler.schedulers.blocking import BlockingScheduler
import time
def test_job():
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

test_job()

scheduler = BlockingScheduler()
scheduler.add_job(test_job,'interval',seconds=5,id='test_job')
scheduler.start()

每周星期一到星期五,下午13:00-19:00每分每4秒執(zhí)行一次

import datetime
import time
from apscheduler.schedulers.blocking import BlockingScheduler
def job_function():
   print("Hello World" + " " + str(datetime.datetime.now()))
if __name__ == '__main__':
    print('start to do it')
    sched = BlockingScheduler()
    sched.add_job(job_function, 'cron', day_of_week='mon-fri', hour='13-19', minute="*", second="*/4") # 每4秒執(zhí)行一次
    sched.start()

cron 觸發(fā)器

詳細說明

Job 作業(yè)

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

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

Trigger 觸發(fā)器

包含調(diào)度邏輯,每一個作業(yè)有它自己的觸發(fā)器,用于決定接下來哪一個作業(yè)會運行。除了它們自己初始配置以外,觸發(fā)器完全是無狀態(tài)的【說人話就是,這個調(diào)度邏輯只能創(chuàng)建時設置,創(chuàng)建好后無法修改調(diào)度邏輯】。

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

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

Jobstore 作業(yè)存儲

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

Executor 執(zhí)行器

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

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

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

處理作業(yè)的運行,它們通常通過在作業(yè)中提交制定的可調(diào)用對象到一個線程或者進城池來進行。當作業(yè)完成時,執(zhí)行器將會通知調(diào)度器。

Scheduler 調(diào)度器

一般只有一個調(diào)度器。

Reference

到此這篇關于Python輕量級定時任務調(diào)度APScheduler的使用的文章就介紹到這了,更多相關Python APScheduler內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • Python中使用format函數(shù)的小結(jié)

    Python中使用format函數(shù)的小結(jié)

    在Python中,format()函數(shù)是一種用于格式化字符串的方法主要介紹了Python中使用format函數(shù)的小結(jié),本文就來介紹一下format()函數(shù)的使用示例,感興趣的可以了解一下
    2023-08-08
  • 如何利用python給圖片添加半透明水印

    如何利用python給圖片添加半透明水印

    這篇文章主要給大家介紹了關于如何利用python給圖片添加半透明水印的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • python如何使用contextvars模塊源碼分析

    python如何使用contextvars模塊源碼分析

    這篇文章主要介紹了python如何使用contextvars模塊源碼分析,contextvars是Python3.7后的官方庫,功能就是可以為多線程以及asyncio生態(tài)添加上下文功能,即使程序在多個協(xié)程并發(fā)運行的情況下,也能調(diào)用到程序的上下文變量,?從而使我們的邏輯解耦
    2022-06-06
  • Python實現(xiàn)前端樣式尺寸單位轉(zhuǎn)換

    Python實現(xiàn)前端樣式尺寸單位轉(zhuǎn)換

    在?Web?前端項目開發(fā)時,樣式尺寸都是以?rpx?為單位,可是?UI?設計師在看完開發(fā)后的?UI?,卻要求都以?px?為單位,所以本文就和大家分享一個利用Python就能實現(xiàn)尺寸單位轉(zhuǎn)換的方法吧
    2023-06-06
  • 關于pytorch處理類別不平衡的問題

    關于pytorch處理類別不平衡的問題

    今天小編就為大家分享一篇關于pytorch處理類別不平衡的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python下實現(xiàn)二叉堆以及堆排序的示例

    python下實現(xiàn)二叉堆以及堆排序的示例

    下面小編就為大家?guī)硪黄猵ython下實現(xiàn)二叉堆以及堆排序的示例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Python入門教程(二十)Python的Lambda表達式

    Python入門教程(二十)Python的Lambda表達式

    這篇文章主要介紹了Python入門教程(二十)Python的Lambda表達式,lambda表達式是一行的函數(shù)。它們在其他語言中也被稱為匿名函數(shù),lambda表達式非常有用,可以讓代碼簡單,簡潔,需要的朋友可以參考下
    2023-04-04
  • Python中的 any() 函數(shù)和 all() 函數(shù)

    Python中的 any() 函數(shù)和 all() 函數(shù)

    這篇文章主要介紹了Python中的 any() 函數(shù)和 all() 函數(shù),文章基于Python的相關資料展開對 any 和 all() 函數(shù)的語法詳細內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • Python中.py文件和.ipynb文件的區(qū)別詳解

    Python中.py文件和.ipynb文件的區(qū)別詳解

    Python開發(fā)者常用的兩種文件格式.py和.ipynb各有特點,本教程將通過對比分析、代碼示例和場景說明,幫助開發(fā)者全面理解二者的區(qū)別與聯(lián)系,需要的朋友可以參考下
    2025-04-04
  • Python Numpy庫安裝與基本操作示例

    Python Numpy庫安裝與基本操作示例

    這篇文章主要介紹了Python Numpy庫安裝與基本操作,簡單介紹了Numpy庫的基本功能、并結(jié)合實例形式分析了基于Numpy庫的數(shù)組與矩陣相關操作技巧,需要的朋友可以參考下
    2019-01-01

最新評論

清远市| 营口市| 临猗县| 曲阳县| 武穴市| 衡阳市| 同心县| 斗六市| 台中市| 那坡县| 腾冲县| 彰化县| 定安县| 方正县| 台南县| 湘阴县| 玉田县| 姚安县| 汶上县| 吴旗县| 九龙城区| 中卫市| 平顶山市| 岢岚县| 江门市| 苏州市| 伊宁县| 宁城县| 济南市| 潼南县| 太保市| 和顺县| 泉州市| 安徽省| 毕节市| 萨迦县| 巨鹿县| 山阴县| 马鞍山市| 云龙县| 旺苍县|