国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python - 定時任務(wù)框架【APScheduler】基本使用詳解(一)

這篇具有很好參考價值的文章主要介紹了Python - 定時任務(wù)框架【APScheduler】基本使用詳解(一)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一. 前言

一個網(wǎng)頁會有很多數(shù)據(jù)是不需要經(jīng)常變動的,比如說首頁,變動頻率低而訪問量大,我們可以把它靜態(tài)化,這樣就不需要每次有請求都要查詢數(shù)據(jù)庫再返回,可以減少服務(wù)器壓力
我們可以使用Django的模板渲染功能完成頁面渲染

二. APSchedule簡介

APScheduler的全稱是Advanced Python Scheduler。它是一個輕量級的 Python 定時任務(wù)調(diào)度框架。
APScheduler 支持三種調(diào)度任務(wù):

  • 固定時間間隔
  • 固定時間點(diǎn)(日期)
  • Linux 下的 Crontab命令。同時,它還支持異步執(zhí)行、后臺執(zhí)行調(diào)度任務(wù)。

三. 使用

1.安裝APScheduler

pip install APScheduler

2. 使用APScheduler 步驟

APScheduler 使用起來還算是比較簡單。運(yùn)行一個調(diào)度任務(wù)只需要以下三部曲:

  1. 新建一個 schedulers (調(diào)度器)
  2. 添加一個調(diào)度任務(wù)(job stores)
  3. 運(yùn)行調(diào)度任務(wù)

簡單示例
在項(xiàng)目模塊或者根目錄的__init__.py文件中添加以下代碼

from apscheduler.scheduler import Scheduler

sched = Scheduler()

@sched.interval_schedule(seconds=2,misfire_grace_time=3600)
def excute_task():
    fun()  #執(zhí)行任務(wù)函數(shù)

sched.start()  #啟動定時任務(wù)腳本

啟動項(xiàng)目即可自動執(zhí)行

python manage.py runserver 8000

3. 基礎(chǔ)組件介紹

APScheduler 有四種組件,分別是:調(diào)度器(scheduler),作業(yè)存儲(job store),觸發(fā)器(trigger),執(zhí)行器(executor)。

  • schedulers(調(diào)度器)

    它是任務(wù)調(diào)度器,屬于控制器角色。它配置作業(yè)存儲器和執(zhí)行器可以在調(diào)度器中完成,例如添加、修改和移除作業(yè)。

  • triggers(觸發(fā)器)

    描述調(diào)度任務(wù)被觸發(fā)的條件。不過觸發(fā)器完全是無狀態(tài)的。

  • job stores(作業(yè)存儲器)

    任務(wù)持久化倉庫,默認(rèn)保存任務(wù)在內(nèi)存中,也可將任務(wù)保存都各種數(shù)據(jù)庫中,任務(wù)中的數(shù)據(jù)序列化后保存到持久化數(shù)據(jù)庫,從數(shù)據(jù)庫加載后又反序列化。

  • executors(執(zhí)行器)

    負(fù)責(zé)處理作業(yè)的運(yùn)行,它們通常通過在作業(yè)中提交指定的可調(diào)用對象到一個線程或者進(jìn)城池來進(jìn)行。當(dāng)作業(yè)完成時,執(zhí)行器將會通知調(diào)度器

schedulers(調(diào)度器)

提供 7種調(diào)度器,能夠滿足我們各種場景的需要。例如:后臺執(zhí)行某個操作,異步執(zhí)行操作等。經(jīng)常使用的為BackgroundScheduler
調(diào)度器分別是:

  • BlockingScheduler 調(diào)度器在當(dāng)前進(jìn)程的主線程中運(yùn)行,也就是會阻塞當(dāng)前線程。
  • BackgroundScheduler 調(diào)度器在后臺線程中運(yùn)行,不會阻塞當(dāng)前線程。
  • AsyncIOScheduler 結(jié)合 asyncio 模塊(一個異步框架)一起使用
  • GeventScheduler 程序中使用 gevent(高性能的Python并發(fā)框架)作為IO模型,和 GeventExecutor
    配合使用。
  • TornadoScheduler 程序中使用 Tornado(一個web框架)的IO模型,用 ioloop.add_timeout
    完成定時喚醒。
  • TwistedScheduler 配合 TwistedExecutor,用 reactor.callLater 完成定時喚醒
  • QtScheduler 你的應(yīng)用是一個 Qt 應(yīng)用,需使用QTimer完成定時喚醒。

triggers(觸發(fā)器)

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

參數(shù) 說明
run_date (datetime 或 str) 作業(yè)的運(yùn)行日期或時間
timezone (datetime.tzinfo 或 str) 指定時區(qū)

date 觸發(fā)器使用示例如下:



from datetime import datetime
from datetime import date
from apscheduler.schedulers.background import BackgroundScheduler

def job_func(text):
    print(text)

scheduler = BackgroundScheduler()
# 在 2017-12-13 時刻運(yùn)行一次 job_func 方法
scheduler.add_job(job_func, 'date', run_date=date(2017, 12, 13), args=['text'])
# 在 2017-12-13 14:00:00 時刻運(yùn)行一次 job_func 方法
scheduler.add_job(job_func, 'date', run_date=datetime(2017, 12, 13, 14, 0, 0), args=['text'])
# 在 2017-12-13 14:00:01 時刻運(yùn)行一次 job_func 方法
scheduler.add_job(job_func, 'date', run_date='2017-12-13 14:00:01', args=['text'])

scheduler.start()

interval 觸發(fā)器

固定時間間隔觸發(fā)。interval 間隔調(diào)度

import datetime
from apscheduler.schedulers.background import BackgroundScheduler

def job_func(text):
    print(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])

scheduler = BackgroundScheduler()
# 每隔兩分鐘執(zhí)行一次 job_func 方法
scheduler.add_job(job_func, 'interval', minutes=2)
# 在 2017-12-13 14:00:01 ~ 2017-12-13 14:00:10 之間, 每隔兩分鐘執(zhí)行一次 job_func 方法
scheduler.add_job(job_func, 'interval', minutes=2, start_date='2017-12-13 14:00:01' , end_date='2017-12-13 14:00:10')

scheduler.start()

cron 觸發(fā)器

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

import datetime
from apscheduler.schedulers.background import BackgroundScheduler

def job_func(text):
    print("當(dāng)前時間:", datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])

scheduler = BackgroundScheduler()
# 在每年 1-3、7-9 月份中的每個星期一、二中的 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()

四. 作業(yè)存儲(job store)

該組件是對調(diào)度任務(wù)的管理

添加 job

有兩種添加方法,其中一種上述代碼用到的 add_job(), 另一種則是scheduled_job()修飾器來修飾函數(shù)。

這個兩種辦法的區(qū)別是:
第一種方法返回一個 apscheduler.job.Job 的實(shí)例,可以用來改變或者移除 job。
第二種方法只適用于應(yīng)用運(yùn)行期間不會改變的 job。

第二種添加任務(wù)方式的例子:

import datetime
from apscheduler.schedulers.background import BackgroundScheduler

@scheduler.scheduled_job(job_func, 'interval', minutes=2)
def job_func(text):
    print(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])

scheduler = BackgroundScheduler()
scheduler.start()

移除 job

移除 job 也有兩種方法:remove_job() 和 job.remove()。
remove_job() 是根據(jù) job 的 id 來移除,所以要在 job 創(chuàng)建的時候指定一個 id。
job.remove() 則是對 job 執(zhí)行 remove 方法即可

scheduler.add_job(job_func, 'interval', minutes=2, id='job_one')
scheduler.remove_job(job_one)

job = add_job(job_func, 'interval', minutes=2, id='job_one')
job.remvoe()

獲取 job 列表

通過 scheduler.get_jobs() 方法能夠獲取當(dāng)前調(diào)度器中的所有 job 的列表

修改 job

如果你因計劃改變要對 job 進(jìn)行修改,可以使用Job.modify() 或者 modify_job()方法來修改 job 的屬性。但是值得注意的是,job 的 id 是無法被修改的。

scheduler.add_job(job_func, 'interval', minutes=2, id='job_one')
scheduler.start()
# 將觸發(fā)時間間隔修改成 5分鐘
scheduler.modify_job('job_one', minutes=5)

job = scheduler.add_job(job_func, 'interval', minutes=2)
# 將觸發(fā)時間間隔修改成 5分鐘
job.modify(minutes=5)

關(guān)閉 job

默認(rèn)情況下調(diào)度器會等待所有正在運(yùn)行的作業(yè)完成后,關(guān)閉所有的調(diào)度器和作業(yè)存儲。如果你不想等待,可以將 wait 選項(xiàng)設(shè)置為 False。

scheduler.shutdown()
scheduler.shutdown(wait=false)

五.執(zhí)行器(executor)

執(zhí)行器顧名思義是執(zhí)行調(diào)度任務(wù)的模塊。最常用的 executor 有兩種:ProcessPoolExecutorThreadPoolExecutor

下面是顯式設(shè)置 job store(使用mongo存儲)和 executor 的代碼的示例。

代碼示例

from pymongo import MongoClient
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.jobstores.mongodb import MongoDBJobStore
from apscheduler.jobstores.memory import MemoryJobStore
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
 
 
def my_job():
    print 'hello world'
host = '127.0.0.1'
port = 27017
client = MongoClient(host, port)
 
jobstores = {
    'mongo': MongoDBJobStore(collection='job', database='test', client=client),
    'default': MemoryJobStore()
}
executors = {
    'default': ThreadPoolExecutor(10),
    'processpool': ProcessPoolExecutor(3)
}
job_defaults = {
    'coalesce': False,
    'max_instances': 3
}
scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults)
scheduler.add_job(my_job, 'interval', seconds=5)
 
try:
    scheduler.start()
except SystemExit:
    client.close()

以上就是python- 定時任務(wù)框架【APScheduler】基本使用介紹,希望對你有所幫助!文章來源地址http://www.zghlxwxcb.cn/news/detail-708711.html

到了這里,關(guān)于Python - 定時任務(wù)框架【APScheduler】基本使用詳解(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Django之定時任務(wù)--apscheduler

    Django之定時任務(wù)--apscheduler

    在寫一個興趣班教務(wù)管理的小程序時,使用了Django后臺來管理數(shù)據(jù)庫,由于每天要根據(jù)現(xiàn)有設(shè)定的班級進(jìn)行課表的更新,所以需要一個定時器,但是開發(fā)環(huán)境是在windows上,后臺部署在linux上,問了chatGPT,說是apscheduer支持跨平臺使用,然后就選了這個,以下是使用過程,按c

    2024年02月13日
    瀏覽(19)
  • python實(shí)現(xiàn)定時任務(wù)的8種方式詳解

    python實(shí)現(xiàn)定時任務(wù)的8種方式詳解

    ????????在日常工作中,常常會用到需要周期性執(zhí)行的任務(wù),一種方式是采用 Linux 系統(tǒng)自帶的 crond 結(jié)合命令行實(shí)現(xiàn)。另外一種方式是直接使用Python。???????? ????????當(dāng)每隔一段時間就要執(zhí)行一段程序,或者往復(fù)循環(huán)執(zhí)行某一個任務(wù),這就需要使用定時任務(wù)來執(zhí)行

    2023年04月09日
    瀏覽(26)
  • Linux的定時任務(wù)--CronTab 命令詳解及使用教程

    Linux的定時任務(wù)--CronTab 命令詳解及使用教程

    Linux crontab 是用來定期執(zhí)行程序的命令。(Nginx 日志切割,數(shù)據(jù)庫備份等) 當(dāng)安裝完成操作系統(tǒng)之后,默認(rèn)便會啟動此任務(wù)調(diào)度命令。 crond 命令每分鐘會定期檢查是否有要執(zhí)行的工作,如果有要執(zhí)行的工作便會自動執(zhí)行該工作。 注意:新創(chuàng)建的 cron 任務(wù),不會馬上執(zhí)行,至

    2024年02月16日
    瀏覽(24)
  • 【Linux】Linux中Crontab(定時任務(wù))命令詳解及使用教程

    【Linux】Linux中Crontab(定時任務(wù))命令詳解及使用教程

    Crontab介紹: Linux crontab是用來crontab命令常見于Unix和類Unix的操作系統(tǒng)之中,用于設(shè)置周期性被執(zhí)行的指令。該命令從標(biāo)準(zhǔn)輸入設(shè)備讀取指令,并將其存放于“crontab”文件中,以供之后讀取和執(zhí)行。該詞來源于希臘語 chronos(χρ?νο?),原意是時間。通常,crontab儲存的指令被守護(hù)

    2024年02月08日
    瀏覽(17)
  • python自動定時任務(wù)schedule庫的使用方法

    當(dāng)你需要在 Python 中定期執(zhí)行任務(wù)時, schedule 庫是一個非常實(shí)用的工具。它可以幫助你自動化定時任務(wù)。以下是一些使用示例: 基本使用 : 上面的代碼表示每隔 10 分鐘執(zhí)行一次 job 函數(shù),非常簡單方便。 更多調(diào)度任務(wù)例子 : 只運(yùn)行一次任務(wù) : 參數(shù)傳遞給作業(yè) : 獲取目前

    2024年02月21日
    瀏覽(21)
  • Ruoyi框架學(xué)習(xí)--定時任務(wù)

    在實(shí)際項(xiàng)目開發(fā)中Web應(yīng)用有一類不可缺少的,那就是定時任務(wù)。 定時任務(wù)的場景可以說非常廣泛,比如某些視頻網(wǎng)站,購買會員后,每天會給會員送成長值,每月會給會員送一些電影券; 比如在保證最終一致性的場景中,往往利用定時任務(wù)調(diào)度進(jìn)行一些比對工作;比如一些

    2023年04月20日
    瀏覽(26)
  • 定時任務(wù)框架快速入門

    定時任務(wù)框架快速入門

    1. Quartz 概述 Quartz 是一個開源的作業(yè)調(diào)度框架(job scheduler),幾乎可以集成到任何 Java 應(yīng)用程序中,從最小的獨(dú)立應(yīng)用程序到最大的電子商務(wù)系統(tǒng)。Quartz 可用于創(chuàng)建簡單或復(fù)雜的調(diào)度來執(zhí)行數(shù)十個、數(shù)百個甚至數(shù)萬個作業(yè);其任務(wù)被定義為標(biāo)準(zhǔn) Java 組件的作業(yè),這些組件幾乎可

    2023年04月22日
    瀏覽(17)
  • Spring Task(定時任務(wù))框架

    Spring Task(定時任務(wù))框架

    Spring Task 是Spring框架提供的任務(wù)調(diào)度工具,可以按照約定的時間自動執(zhí)行某個代碼邏輯。 應(yīng)用場景: 信用卡每月還款提醒 銀行貸款每月還款提醒 火車票售票系統(tǒng)處理未支付訂單 入職紀(jì)念日為用戶發(fā)送通知 等等… (只要是需要定時處理當(dāng)達(dá)到場景都可以使用Spring Task) cr

    2024年02月05日
    瀏覽(33)
  • 分布式定時任務(wù)框架 PowerJob

    分布式定時任務(wù)框架 PowerJob

    1.1 為什么需要使用定時任務(wù)調(diào)度 (1)時間驅(qū)動處理場景:整點(diǎn)發(fā)送優(yōu)惠券,每天更新收益,每天刷新標(biāo)簽數(shù)據(jù)和人群數(shù)據(jù)。 (2)批量處理數(shù)據(jù):按月批量統(tǒng)計報表數(shù)據(jù),批量更新短信狀態(tài),實(shí)時性要求不高。 (3)異步執(zhí)行解耦:活動狀態(tài)刷新,異步執(zhí)行離線查詢,與內(nèi)部

    2024年02月09日
    瀏覽(25)
  • 支付寶定時任務(wù)怎么做?三層分發(fā)任務(wù)處理框架介紹

    支付寶定時任務(wù)怎么做?三層分發(fā)任務(wù)處理框架介紹

    ? 一、背景介紹 技術(shù)同學(xué)對定時任務(wù)肯定不陌生。定時任務(wù)一般用來定時批量進(jìn)行業(yè)務(wù)處理。支付寶卡包券到期提醒、刪除過期失效券,五福大促批量給用戶發(fā)放添福紅包等場景,都是通過定時任務(wù)觸發(fā)來完成的。 作者有幸參與了2023兔年五福大促的開發(fā),主導(dǎo)完成了福氣樂

    2023年04月12日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包