python apscheduler一次只有一個job_Python使用APScheduler實現定時任務過程解析

前言

APScheduler是基于Quartz的一個Python定時任務框架。提供了基于日期、固定時間間隔以及crontab類型的任務,并且可以持久化任務。

一、安裝APScheduler

pip install apscheduler

二、基本概念

APScheduler有四大組件:

1、觸發器 triggers :

觸發器包含調度邏輯。每個作業都有自己的觸發器,用于確定下一個任務何時運行。除了初始配置之外,觸發器是完全無狀態的。

有三種內建的trigger:

(1)date: 特定的時間點觸發

(2)interval: 固定時間間隔觸發

(3)cron: 在特定時間周期性地觸發

2、任務儲存器 job stores:用于存放任務,把任務存放在內存(為默認MemoryJobStore)或數據庫中。

3、執行器 executors: 執行器是將任務提交到線程池或進程池中運行,當任務完成時,執行器通知調度器觸發相應的事件。

4、調度器 schedulers: 把上方三個組件作為參數,通過創建調度器實例來運行

根據開發需求選擇相應的組件,下面是不同的調度器組件:

BlockingScheduler 阻塞式調度器:適用于只跑調度器的程序。

BackgroundScheduler 后臺調度器:適用于非阻塞的情況,調度器會在后臺獨立運行。

AsyncIOScheduler AsyncIO調度器,適用于應用使用AsnycIO的情況。

GeventScheduler Gevent調度器,適用于應用通過Gevent的情況。

TornadoScheduler Tornado調度器,適用于構建Tornado應用。

TwistedScheduler Twisted調度器,適用于構建Twisted應用。

QtScheduler Qt調度器,適用于構建Qt應用。

三、使用步驟

1、新建一個調度器schedulers

2、添加調度任務

3、運行調度任務

四、使用實例

1、觸發器date

特定的時間點觸發,只執行一次。參數如下:

參數

說明

run_date (datetime 或 str)

作業的運行日期或時間

timezone (datetime.tzinfo 或 str)

指定時區

使用例子:

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(2019, 8, 30), args=['text1'])

# 在 2019-8-30 01:00:00 運行一次 job 方法

scheduler.add_job(job, 'date', run_date=datetime(2019, 8, 30, 1, 0, 0), args=['text2'])

# 在 2019-8-30 01:00:01 運行一次 job 方法

scheduler.add_job(job, 'date', run_date='2019-8-30 01:00:00', args=['text3'])

scheduler.start()

2、觸發器interval

固定時間間隔觸發。參數如下:

參數

說明

weeks (int)

間隔幾周

days (int)

間隔幾天

hours (int)

間隔幾小時

minutes (int)

間隔幾分鐘

seconds (int)

間隔多少秒

start_date (datetime 或 str)

開始日期

end_date (datetime 或 str)

結束日期

timezone (datetime.tzinfo 或str)

使用例子:

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()

# 每隔 1分鐘 運行一次 job 方法

scheduler.add_job(job, 'interval', minutes=1, args=['job1'])

# 在 2019-08-29 22:15:00至2019-08-29 22:17:00期間,每隔1分30秒 運行一次 job 方法

scheduler.add_job(job, 'interval', minutes=1, seconds = 30, start_date='2019-08-29 22:15:00', end_date='2019-08-29 22:17:00', args=['job2'])

scheduler.start()

'''

運行結果:

job2 --- 2019-08-29 22:15:00

job1 --- 2019-08-29 22:15:46

job2 --- 2019-08-29 22:16:30

job1 --- 2019-08-29 22:16:46

job1 --- 2019-08-29 22:17:46

...余下省略...

'''

3、觸發器cron

在特定時間周期性地觸發。參數如下:

參數

說明

year (int 或 str)

年,4位數字

month (int 或 str)

月 (范圍1-12)

day (int 或 str)

日 (范圍1-31)

week (int 或 str)

周 (范圍1-53)

day_of_week (int 或 str)

周內第幾天或者星期幾 (范圍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)

最晚結束時間(包含)

timezone (datetime.tzinfo 或str)

指定時區

這些參數支持算數表達式,取值格式有如下:

使用例子:

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'])

scheduler.start()

'''

運行結果:

job1 --- 2019-08-29 22:25:00

job2 --- 2019-08-29 22:25:00

job1 --- 2019-08-29 22:26:00

job1 --- 2019-08-29 22:27:00

...余下省略...

'''

4、通過裝飾器scheduled_job()添加方法

添加任務的方法有兩種:

(1)通過調用add_job()---見上面1至3代碼

(2)通過裝飾器scheduled_job():

第一種方法是最常用的方法。第二種方法主要是方便地聲明在應用程序運行時不會更改的任務。該 add_job()方法返回一個apscheduler.job.Job實例,可以使用該實例稍后修改或刪除該任務。

import time

from apscheduler.schedulers.blocking import BlockingScheduler

scheduler = BlockingScheduler()

@scheduler.scheduled_job('interval', seconds=5)

def job1():

t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

print('job1 --- {}'.format(t))

@scheduler.scheduled_job('cron', second='*/7')

def job2():

t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

print('job2 --- {}'.format(t))

scheduler.start()

'''

運行結果:

job2 --- 2019-08-29 22:36:35

job1 --- 2019-08-29 22:36:37

job2 --- 2019-08-29 22:36:42

job1 --- 2019-08-29 22:36:42

job1 --- 2019-08-29 22:36:47

job2 --- 2019-08-29 22:36:49

...余下省略...

'''

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457622.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457622.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java web service簡單示例

http://www.iteye.com/topic/1135747 轉載于:https://www.cnblogs.com/fycct/p/5669420.html

shell統計指定目錄下所有文件類型及數量

#!/bin/bash#Synopsis:用于統計腳本當前所在目錄或者用戶指定目錄下的所有文件類型及數量#若直接運行腳本而不接任何命令行參數,則默認會統計腳本所在目錄下的文件#Date:2016/10#Author:Jian#Usage:sh fileStat.sh /path1 /path2testFile$(mktemp /tmp/testfile.XXX)#如果沒有指…

python cross val score_sklearn函數:cross_val_score(交叉驗證評分)

sklearn.model_selection.cross_val_score(estimator,X,yNone,*,groupsNone,scoringNone,cvNone,n_jobsNone,verbose0,fit_paramsNone,pre_dispatch2*n_jobs,error_scorenan)前面我們提到了4種分割數據集的方法,在分割完數據集后,我們訓練模型&#xff0…

JS_17 ES5,ES6

ES5 嚴格模式 定義方法 use strict特性: 必須使用var定義變量存在eval作用域禁止自定義函數中的this指向window對象不能有重名屬性 JSON對象 json.stringify(obj/arr):js對象轉換為json對象json.parse(str):json對象轉換為js對象 Object拓展 Object.create(p…

幾種純css布局的導航欄

1.垂直導航欄 頁面效果 <ul class"nav"><li><a href"home.htm">Home</a></li><li><a href"about.htm">About</a></li><li><a href"services.htm">Services</a&…

python中函數的參數傳遞(傳值還是傳引用)

函數的參數傳遞 函數參數傳遞有兩種方式&#xff0c;傳值和傳引用&#xff0c;傳值只是把變量的值復制一份給了實參&#xff0c;函數內部的操作不會改變函數外部變量的值&#xff0c;而傳引用傳遞的是外部變量的地址&#xff0c;函數內部直接操作函數外部變量的儲存空間&#…

poi獲取有效單元格個數_EXCEL利用SUM函數和FREQUENCY函數數組公式統計不同區間數據個數...

EXCEL函數公式大全之利用FREQUENCY函數數組公式統計不同區間數據個數。EXCEL函數與公式在工作中使用非常的頻繁&#xff0c;會不會使用公式直接決定了我們的工作效率&#xff0c;今天我們來學習一下提高我們工作效率的函數FREQUENCY函數和數組公式。今天我們的例子是統計學生在…

windows安裝rsync

客戶端&#xff1a;cwRsync 4.0.5 Installer服務端&#xff1a;cwRsyncServer 4.0.5 Installer 安裝配置Rsync服務端 1.直接雙擊安裝包安裝即可&#xff0c;在安裝過程中會有要求用戶輸入賬戶密碼或者使用默認。此賬戶是rsync服務運行的用戶。 2.安裝完成之后&#xff0c;進入程…

洛谷 P2735 電網 Electric Fences Label:計算幾何--皮克定理

題目描述 在本題中&#xff0c;格點是指橫縱坐標皆為整數的點。 為了圈養他的牛&#xff0c;農夫約翰&#xff08;Farmer John)建造了一個三角形的電網。他從原點&#xff08;0,0&#xff09;牽出一根通電的電線&#xff0c;連接格點(n,m)&#xff08;0<n<32000,0<m&l…

Python元類(type()和metaclass)

1. 元類是什么 眾所周知&#xff0c;對象由類實例化而來&#xff0c;類是對象的模板&#xff0c;而python一切皆對象&#xff0c;類也是對象&#xff0c;它由元類&#xff08;type&#xff09;創建&#xff0c;所以元類是類的類&#xff0c;是類的模板 2. 創建類的另一種方法…

word文檔打印 自動編碼_辦公室文件打印有哪些技巧 辦公室文件打印技巧介紹【圖文】...

辦公室文件打印實用技巧三則一. 打印文件直接裝訂——逆序打印相信使用Word打印過長篇文檔的朋友一定都清楚&#xff0c;打印完成后的裝訂一直是個麻煩事兒&#xff0c;因為文件由打印機打出時&#xff0c;第一頁肯定會在最下面&#xff0c;裝訂之前總要費時費力的把紙張按順序…

Strategy 策略模式

意圖 定義一系列的算法,把它們一個個封裝起來, 并且使它們可相互替換。本模式使得算法可獨立于使用它的客戶而變化。 動機 策略模式為了適應不同的需求&#xff0c;只把變化點封裝了&#xff0c;這個變化點就是實現不同需求的算法&#xff0c;但是&#xff0c;用戶需要知道各種…

python 消息中間件_消息隊列中間件 RabbitMQ 詳細介紹——安裝與基本應用(Python)...

RabbitMQ 是當前最流行的消息中間件(Message Broker)之一&#xff0c;支持多種消息協議(如 AMQP、MQTT)。同時它也是一個輕量級的非常易于部署的開源軟件&#xff0c;可以運行在當前大多數操作系統及云端環境中&#xff0c;也能夠部署在分布式的集群環境里以達到高可用、可伸縮…

用 Flask 來寫個輕博客 (1) — 創建項目

目錄 目錄前言擴展閱讀部署開發環境創建 Github 項目前言 一步一步的實現一個 Flask 輕博客項目啟動&#xff0c;最新的代碼會上傳到 Github。 擴展閱讀 歡迎使用 Flask — virtualenv 部署開發環境 連接 GitHubhostnamectl set-hostname flask-dev # 設置 hostname ssh-keyg…

python靜態方法,類方法,屬性方法,實例方法

DAY 3. 靜態方法&#xff0c;類方法&#xff0c;屬性方法&#xff0c;實例方法 有四種方法&#xff0c;實例方法&#xff0c;類方法&#xff0c;靜態方法&#xff0c;屬性方法 實例方法 實例方法的第一個參數是self&#xff0c;他會指向類的實例化對象&#xff0c;只能被對象…

ubuntu 軟件包降級

ubuntu 軟件包降級 sudo aptitude install libssl-dev 1. 是否接受該解決方案&#xff1f; [Y/n/?] n 2. 是否接受該解決方案&#xff1f; [Y/n/?] y 3. 您要繼續嗎&#xff1f; [Y/n/?] ysudo aptitude install libcairo21.4.10-1ubuntu4 # 強制降級 sudo aptitude forbid…

java后期發展方向_Java程序員的4個職業發展方向,該如何把握黃金5年?

在Java程序界流行著一種默認的說法叫“黃金5年”&#xff0c;意思是說&#xff0c;一個Java程序員從入職的時候算起&#xff0c;前五年我選擇直接影響著整個職業生涯的發展方向和薪資走向。而這5年&#xff0c;也決定了一個程序員能否成為職業大牛的可能。那么&#xff0c;在這…

python 類變量(屬性)和實例變量(屬性

DAY 4. 類變量&#xff08;屬性&#xff09;和實例變量&#xff08;屬性&#xff09; 類變量&#xff1a;在所有類的實例之間都可以共享的變量&#xff0c;類變量在所有對象間只保留一份 在類體中定義類的所有實例對象都可以訪問類變量類變量只能由類修改&#xff0c;實例對象…

MySQL 關聯表批量修改(數據同步)

update table1 t1 ,table2 t2 set t1.field1 t2.field2 where t1.id t2.id 轉載于:https://www.cnblogs.com/52php/p/5677908.html

sourcetree不好做到的一些git操作

2019獨角獸企業重金招聘Python工程師標準>>> 日常中我們有很多操作通過sourcetree就可以實現界面化操作&#xff0c;但是有一些場景不好去實現&#xff0c;這里總結下&#xff1a; 場景1&#xff1a;我們有個A分支&#xff0c;需要跟master分支合并等待上線&#xf…