APScheduler 是python的一个任务调度框架。
使用起来十分方便,提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。
1. 安装
APScheduler下载
这里使用的是2.1.2
2. cron job例子
APScheduler是进程内的调度器,可以定时触发具体的函数,并且可以访问应用的所有变量和函数。在web应用中通过APScheduler实现定时任务是很方便的。
#coding:utf-8
import datetime
from apscheduler.scheduler import Scheduler
#不使用守护线程
schedudler = Scheduler(daemonic = False)
#每周星期1-星期5,9点-12点、14点-15点,0分-59分,每3秒执行
@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的执行信息,默认使用的是RAMJobStore,还提供了SQLAlchemyJobStore、ShelveJobStore和MongoDBJobStore。
APScheduler允许同时使用多个jobstore,通过别名(alias)区分,在添加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
#不使用守护线程
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秒执行,直到46秒结束
#@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动作之后调用,否则会抛错。默认会把job信息保存在apscheduler数据库下的jobs表。
网友评论