apscheduler -定时任务
https://apscheduler.readthedocs.io/en/latest/userguide.html
簡單的使用方式為:
?
from apscheduler.schedulers.blocking import BlockingScheduler
?
sched = BlockingScheduler()
sched.add_job(ff_task,'cron',hour='0-1,8-23',minute=28)
sched.add_job(avor_task, 'cron', hour='2-7', minute='0')
sched.add_job(vor_task,'cron',hour='0-1,8-23',minute='*/3')
try:
? ? sched.start()
except (KeyboardInterrupt, SystemExit):
? ? sched.shutdown()
?
?
?
apscheduler包含四個組件 :triggers觸發(fā)器 , schedulers 調(diào)度器 ,job stores任務(wù)存儲 , executors執(zhí)行器?
triggers 包含計劃的邏輯,每個任務(wù)都有自己的觸發(fā)器,來決定任務(wù)下次被觸發(fā)的時間,除了類型的初始配置,觸發(fā)器是完全無狀態(tài)的
job stores 用戶存儲被計劃的任務(wù),默認(rèn)存儲在內(nèi)存中,也可存儲在各種數(shù)據(jù)庫中。當(dāng)一個任務(wù)被存儲在持久化的存儲庫中時將被序列化,然后在加載到內(nèi)存時被反序列化。
調(diào)度器之間不應(yīng)該共用任務(wù)存儲。
executors 用于處理任務(wù)的執(zhí)行。 讓預(yù)定的任務(wù)在線程或進(jìn)程池中啟動,當(dāng)任務(wù)結(jié)束后,執(zhí)行器通知調(diào)度器什么時候進(jìn)行合適的事件。
scheduler用于將所有的組建凝結(jié)起來。一個應(yīng)用中通常只有一個調(diào)度器?
BlockingScheduler:用于當(dāng)scheduler是進(jìn)程里唯一運(yùn)行的程序
BlockgroundScheduler:當(dāng)你沒有使用以下任何一個調(diào)度器,并且希望scheduler在應(yīng)用的后臺運(yùn)行時適用
AsyncIOScheduler :當(dāng)應(yīng)用中使用 asyncio module(異步io模塊)時適用
GeventScheduler :當(dāng)應(yīng)用中使用 gevent時適用
TornadoScheduler :當(dāng)構(gòu)建基于Tornado的應(yīng)用時適用
TwistedScheduler: 當(dāng)構(gòu)建基于 TwistedScheduler的應(yīng)用時適用
QtScheduler: 當(dāng)構(gòu)建 Qt 應(yīng)用時適用
?
存儲器選擇
如果每次開啟應(yīng)用時都會重建任務(wù)計劃,則可以使用默認(rèn)的內(nèi)存存儲
如果你希望當(dāng)scheduler重啟或應(yīng)用宕機(jī)時,任務(wù)可以繼續(xù)的按計劃執(zhí)行 ,存儲器的選擇通常取決于開發(fā)環(huán)境中使用的工具。
如果你沒什么要求則推薦使用SQLAlchemyJobStore,以PostgreSQL作為存儲后端
?
執(zhí)行器
通常取決于上述組建的選擇,不過,通常默認(rèn)的執(zhí)行器 ThreadPoolExecutor也足夠大多數(shù)任務(wù)了。如果任務(wù)中設(shè)計了cpu密集型操作,應(yīng)該考慮ProcessPoolExecutor ,來使用多核CPU。
你甚至可以同時使用這兩個執(zhí)行器,將進(jìn)程池執(zhí)行器添加為備選執(zhí)行器
?
觸發(fā)器
trigger決定任務(wù)執(zhí)行時間的邏輯。ASPcheduler內(nèi)置三種觸發(fā)器:
date : 一次性的固定時間點執(zhí)行任務(wù)
interval: 按周期循環(huán)執(zhí)行任務(wù)
cron: 語法類似linux的定時任務(wù)cron
要組合多種triggers,也可實現(xiàn) ,combining triggers ,見 https://apscheduler.readthedocs.io/en/latest/modules/triggers/combining.html#module-apscheduler.triggers.combining?
?
ASPchedulre提供多種配置方式 ,可以通過一個配置的dict或者作為可選關(guān)鍵字參數(shù)傳入。或者也可先實例化scheduler,添加任務(wù),然后再配置scheduler,這種方式取得最大的靈活性。
完整的而配置說明見 https://apscheduler.readthedocs.io/en/latest/modules/schedulers/base.html#apscheduler.schedulers.base.BaseScheduler
?
例如,選用BackgroundScheduler ,使用默認(rèn)的job store 和默認(rèn)的executor:
from apscheduler.schedulers.background import BackgroundScheduler
scheduler=BackgroundScheduler()
這將會用名為”default"的MemoryJobStore ,名為“default"的ThreadPoolExecutor,默認(rèn)線程池最大量為10的配置創(chuàng)建一個 BackgroundScheduler 。
例1
from pytz import utc?
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.mongodb import MongoDBJobStore
from apscheduler.executors.pool import ThreadPoolExecutor,ProcessPoolExecutor?
jobstores={
'mongo':MongoDBJobStore(),
'default':SQLAlchemyJobStore(url='sqlite://jobs.sqlite')
}
executors={
'default':ThreadPoolExecutor(20),
'processpool':ProcessPoolExector(5)
}
job_defaults={
'coalesce':False,
'max_instances';3
}
scheduler=BackgroundScheduler(jonstores=jobstores,executors=executors,job_defaults,timezone=utc)
?
例2?
from apsshceduler.schedulers.background import BackgroundScheduler
scheduler=BackgroundScheduler({
'apscheduler.jonstores.mongo':{
'type':'mongodb'
},
'apscheduler.jobstores.default':{
'type':'sqlalchemy',
'url':'sqlite:///jobs.sqlite'
},
'apscheduler.executors.default':{
'class':'apscheduler.executors.pool:ThreadExecutor',
'max_workers':'20'
},
'apscheduler.executors.processpool':{
'type':'processpool',
'max_workers':'5'
},
'apscheduler.job_defaults.coalesce':'false',
'apscheduler.job_defaults.max_instances':'3',
'apscheduler.timezone':'UTC',
}
)
例3
from pytz import utc
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ProcessPoolExecutor
jobstores={
'mongo':{'type':'mongodb'},
'default':SQLAlchemyJobStore(url='sqlite://jobs.sqlite')
}
executors={
'default':{'type':'threadpool','max_workers':20},
'processpool':ProcessPoolExecutor(max_workers=5)
}
job_defaults={
'coalesce':False,
'max_instances':3
}
scheduler=BackgroundScheduler()
scheduler,configure(jobstores=jobstores,executors=executors,job_defaults=job_defaults,timezone=utc)
?
轉(zhuǎn)載于:https://www.cnblogs.com/Ting-light/p/9512802.html
總結(jié)
以上是生活随笔為你收集整理的apscheduler -定时任务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [cdq分治][树状数组] Jzoj P
- 下一篇: CTU 2017 J - Punchin