APScheduler 是python的一個任務(wù)調(diào)度框架。
使用起來十分方便,提供了基于日期、固定時間間隔以及crontab類型的任務(wù),并且可以持久化任務(wù)。
1. 安裝
APScheduler下載
這里使用的是2.1.2
2. cron job例子
APScheduler是進(jìn)程內(nèi)的調(diào)度器,可以定時觸發(fā)具體的函數(shù),并且可以訪問應(yīng)用的所有變量和函數(shù)。在web應(yīng)用中通過APScheduler實現(xiàn)定時任務(wù)是很方便的。
#coding:utf-8
import datetime
from apscheduler.scheduler import Scheduler
#不使用守護(hù)線程
schedudler = Scheduler(daemonic = False)
#每周星期1-星期5,9點-12點、14點-15點,0分-59分,每3秒執(zhí)行
@schedudler.cron_schedule(day_of_week='0-4', hour='9-12,14-15', minute='0-59', second='*/3')
def quote_send_sh_job_1():
print 'a simple cron job start at (1)', datetime.datetime.now()
@schedudler.cron_schedule(day_of_week='0-4', hour='9-12,14-15,17-18', minute='0-59', second='*/7')
def quote_send_sh_job_2():
print 'a simple cron job start at (2)', datetime.datetime.now()
schedudler.start()
3. Store
APScheduler提供了jobstore用于存儲job的執(zhí)行信息,默認(rèn)使用的是RAMJobStore,還提供了SQLAlchemyJobStore、ShelveJobStore和MongoDBJobStore。
APScheduler允許同時使用多個jobstore,通過別名(alias)區(qū)分,在添加job時需要指定具體的jobstore的別名,否則使用的是別名是default的jobstore,即RAMJobStore。
下面以MongoDBJobStore舉例說明。
#coding:utf-8
import datetime
from apscheduler.scheduler import Scheduler
import pymongo
from apscheduler.jobstores.mongodb_store import MongoDBJobStore
#不使用守護(hù)線程
schedudler = Scheduler(daemonic = False)
mongo = pymongo.Connection(host='127.0.0.1', port=27017)
store = MongoDBJobStore(connection = mongo)
schedudler.add_jobstore(store, 'mongo') #別名是mongo
@schedudler.cron_schedule(day_of_week='0-4', hour='9-12,13-15,16-18', minute='0-59', second='*/11', jobstore='mongo')
#2014年7月18日16點45分每11秒執(zhí)行,直到46秒結(jié)束
#@schedudler.cron_schedule(year='2014', month='7', day='18', hour='16', minute='45', second='*/11', jobstore='mongo') #和別名mongo相同
def mongo_job_store():
print 'mongo cron job store start at', datetime.datetime.now()
schedudler.start()
注意start()必須在添加job動作之后調(diào)用,否則會拋錯。默認(rèn)會把job信息保存在apscheduler數(shù)據(jù)庫下的jobs表。