2019独角兽企业重金招聘Python工程师标准>>>

APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。基于这些功能,我们可以很方便的实现一个python定时任务系统,写python还是要比java舒服多了。

1. 安装

安装过程很简单,可以基于easy_install和源码。

[plain] view plain copy print?

easy_install apscheduler

或者下载源码,运行命令:

[plain] view plain copy print?

python setup.py install

2. cron job例子

APScheduler是进程内的调度器,可以定时触发具体的函数,并且可以访问应用的所有变量和函数。在web应用中通过APScheduler实现定时任务是很方便的。下面看例子:

[python] view plain copy print?

from apscheduler.scheduler import Scheduler

schedudler = Scheduler(daemonic = False)

@schedudler.cron_schedule(second='*', day_of_week='0-4', hour='9-12,13-15')

def quote_send_sh_job():

print 'a simple cron job start at', datetime.datetime.now()

schedudler.start()

上面通过装饰器定义了cron job,可以通过函数scheduler.add_cron_job添加,用装饰器更方便。Scheduler构造函数中传入daemonic参数,表示执行线程是非守护的,在Schduler的文档中推荐使用非守护线程:

[plain] view plain copy print?

Jobs are always executed in non-daemonic threads.

具体cron job的配置参看doc,基本上与Quartz一致。

在添加job时还有一个比较重要的参数max_instances,指定一个job的并发实例数,默认值是1。默认情况下,如果一个job准备执行,但是该job的前一个实例尚未执行完,则后一个job会失败,可以通过这个参数来改变这种情况。

3. Store

APScheduler提供了jobstore用于存储job的执行信息,默认使用的是RAMJobStore,还提供了SQLAlchemyJobStore、ShelveJobStore和MongoDBJobStore。APScheduler允许同时使用多个jobstore,通过别名(alias)区分,在添加job时需要指定具体的jobstore的别名,否则使用的是别名是default的jobstore,即RAMJobStore。下面以MongoDBJobStore举例说明。

[python] view plain copy print?

import pymongo

from apscheduler.scheduler import Scheduler

from apscheduler.jobstores.mongodb_store import MongoDBJobStore

import time

sched = Scheduler(daemonic = False)

mongo = pymongo.Connection(host='127.0.0.1', port=27017)

store = MongoDBJobStore(connection=mongo)

sched.add_jobstore(store, 'mongo')        # 别名是mongo

@sched.cron_schedule(second='*', day_of_week='0-4', hour='9-12,13-15', jobstore='mongo')        # 向别名为mongo的jobstore添加job

def job():

print 'a job'

time.sleep(1)

sched.start()

注意start必须在添加job动作之后调用,否则会抛错。默认会把job信息保存在apscheduler数据库下的jobs表:

[plain] view plain copy print?

> db.jobs.findOne()

{

"_id" : ObjectId("502202d1443c1557fa8b8d66"),

"runs" : 20,

"name" : "job",

"misfire_grace_time" : 1,

"coalesce" : true,

"args" : BinData(0,"gAJdcQEu"),

"next_run_time" : ISODate("2012-08-08T14:10:46Z"),

"max_instances" : 1,

"max_runs" : null,

"trigger" : BinData(0,"gAJjYXBzY2hlZHVsZXIudHJpZ2dlcnMuY3JvbgpDcm9uVHJpZ2dlcgpxASmBcQJ9cQMoVQZmaWVsZHNxBF1xBShjYXBzY2hlZHVsZXIudHJpZ2dlcnMuY3Jvbi5maWVsZHMKQmFzZUZpZWxkCnEGKYFxB31xCChVCmlzX2RlZmF1bHRxCYhVC2V4cHJlc3Npb25zcQpdcQtjYXBzY2hlZHVsZXIudHJpZ2dlcnMuY3Jvbi5leHByZXNzaW9ucwpBbGxFeHByZXNzaW9uCnEMKYFxDX1xDlUEc3RlcHEPTnNiYVUEbmFtZXEQVQR5ZWFycRF1YmgGKYFxEn1xEyhoCYhoCl1xFGgMKYFxFX1xFmgPTnNiYWgQVQVtb250aHEXdWJjYXBzY2hlZHVsZXIudHJpZ2dlcnMuY3Jvbi5maWVsZHMKRGF5T2ZNb250aEZpZWxkCnEYKYFxGX1xGihoCYhoCl1xG2gMKYFxHH1xHWgPTnNiYWgQVQNkYXlxHnViY2Fwc2NoZWR1bGVyLnRyaWdnZXJzLmNyb24uZmllbGRzCldlZWtGaWVsZApxHymBcSB9cSEoaAmIaApdcSJoDCmBcSN9cSRoD05zYmFoEFUEd2Vla3EldWJjYXBzY2hlZHVsZXIudHJpZ2dlcnMuY3Jvbi5maWVsZHMKRGF5T2ZXZWVrRmllbGQKcSYpgXEnfXEoKGgJiWgKXXEpY2Fwc2NoZWR1bGVyLnRyaWdnZXJzLmNyb24uZXhwcmVzc2lvbnMKUmFuZ2VFeHByZXNzaW9uCnEqKYFxK31xLChoD05VBGxhc3RxLUsEVQVmaXJzdHEuSwB1YmFoEFULZGF5X29mX3dlZWtxL3ViaAYpgXEwfXExKGgJiWgKXXEyKGgqKYFxM31xNChoD05oLUsMaC5LCXViaCopgXE1fXE2KGgPTmgtSw9oLksNdWJlaBBVBGhvdXJxN3ViaAYpgXE4fXE5KGgJiGgKXXE6aAwpgXE7fXE8aA9Oc2JhaBBVBm1pbnV0ZXE9dWJoBimBcT59cT8oaAmJaApdcUBoDCmBcUF9cUJoD05zYmFoEFUGc2Vjb25kcUN1YmVVCnN0YXJ0X2RhdGVxRE51Yi4="),

"func_ref" : "__main__:job",

"kwargs" : BinData(0,"gAJ9cQEu")

}

上面就是存储的具体信息。

4.异常处理

当job抛出异常时,APScheduler会默默的把他吞掉,不提供任何提示,这不是一种好的实践,我们必须知晓程序的任何差错。APScheduler提供注册listener,可以监听一些事件,包括:job抛出异常、job没有来得及执行等。

Constant Event class Triggered when...

EVENT_SCHEDULER_START SchedulerEvent The scheduler is started

EVENT_SCHEDULER_SHUTDOWN SchedulerEvent The scheduler is shut down

EVENT_JOBSTORE_ADDED JobStoreEvent A job store is added to the scheduler

EVENT_JOBSTORE_REMOVED JobStoreEvent A job store is removed from the scheduler

EVENT_JOBSTORE_JOB_ADDED JobStoreEvent A job is added to a job store

EVENT_JOBSTORE_JOB_REMOVED JobStoreEvent A job is removed from a job store

EVENT_JOB_EXECUTED JobEvent A job is executed successfully

EVENT_JOB_ERROR JobEvent A job raised an exception during execution

EVENT_JOB_MISSED JobEvent A job’s execution time is missed

看下面的例子,监听异常和miss事件,这里用logging模块打印日志,logger.exception()可以打印出异常堆栈信息。

[python] view plain copy print?

def err_listener(ev):

err_logger = logging.getLogger('schedErrJob')

if ev.exception:

err_logger.exception('%s error.', str(ev.job))

else:

err_logger.info('%s miss', str(ev.job))

schedudler.add_listener(err_listener, apscheduler.events.EVENT_JOB_ERROR | apscheduler.events.EVENT_JOB_MISSED)

事件的属性包括:

job – the job instance in question

scheduled_run_time – the time when the job was scheduled to be run

retval – the return value of the successfully executed job

exception – the exception raised by the job

traceback – the traceback object associated with the exception

最后,需要注意一点当job不以daemon模式运行时,并且APScheduler也不是daemon的,那么在关闭脚本时,Ctrl + C是不奏效的,必须kill才可以。可以通过命令实现关闭脚本:

[plain] view plain copy print?

ps axu | grep {脚本名} | grep -v grep | awk '{print $2;}' | xargs kill

转载于:https://my.oschina.net/u/2274056/blog/657420

Python定时任务框架APScheduler相关推荐

  1. Python 定时任务框架 APScheduler

    Python定时任务:多种实现方法 Python 定时任务框架 APScheduler 详解 APScheduler官方文档 Git-hub examples 例子1:apscheduler.trig ...

  2. Python定时任务框架APScheduler快速入门

    文章目录 前言 一.安装 二.简单使用 1.代码如下(示例) 2.APScheduler 的运行流程 三.APScheduler 四组件 1.调度器(schedulers)---不同程序引用 2.任务 ...

  3. Python定时任务框架apscheduler,定时执行多个固定任务

    apscheduler Python 的 apscheduler 提供了非常丰富而且方便易用的定时任务接口. apscheduler使用起来十分方便.提供了基于日期.固定时间间隔以及crontab 类 ...

  4. python定时任务之cron_Python定时任务框架APScheduler 3.0.3 Cron示例

    APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.基 ...

  5. python apscheduler执行_Python下定时任务框架APScheduler的使用

    今天准备实现一个功能需要用到定时执行任务,所以就看到了Python的一个定时任务框架APScheduler,试了一下感觉还不错. 1.APScheduler简介: APScheduler是Python ...

  6. python定时任务框架_Python定时任务框架APScheduler

    APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.基 ...

  7. python定时任务每月1号_Python 定时任务框架 APScheduler 详解

    APScheduler 最近想写个任务调度程序,于是研究了下 Python 中的任务调度工具,比较有名的是:Celery,RQ,APScheduler. Celery:非常强大的分布式任务调度框架 R ...

  8. 在Linux服务器上执行python定时任务(APScheduler定时框架)

    目标:在Linux服务器上,定时运行python脚本. 这个小玩意儿适用于让服务器做一些自动的东西,比如定时查库发送报表.定时让爬虫爬数据.定时提醒等等. 那有同学要问了:为啥不用自己电脑直接运行?- ...

  9. python定时任务:apscheduler的使用(还有一个celery~)

    APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时检测钓鱼网站的程序等等,都涉及到了关于定时任务的问题,第 ...

最新文章

  1. java把一段英文拆成单词_Java Word Break(单词拆解)
  2. linux网络编程之IP协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)和TCP、UDP协议头结构总结
  3. 工业交换机外壳选用时有什么要求?
  4. 细数一行代码改变结局的炼丹骚操作
  5. 软件工程——认识方法、模型、工具和技术
  6. Reservoir Computing: Harnessing a Universal Dynamical System
  7. 【转载】.NET设计模式之抽象工厂模式(Abstract Factory)
  8. Python基础(循环控制语句break/continue)
  9. CleanCodeHandbook Chapter 7: Stack(39-41)
  10. apache ftpserver java开发_apache FTPserver安装
  11. 【Prison Break】第一天(3.27)
  12. 深度linux新增分辨率,深度Linux Deepin设置分辨率为1920x1080
  13. mbr装win10 gpt装linux,安装win10硬盘格式用gpt还是mbr好_安装win10硬盘需要什么格式...
  14. Lighttools中模拟白光LED
  15. 阿里云云计算工程师ACA认证(Alibaba Cloud Certified Associate - Cloud Computing)考试大纲-V3.0
  16. 虹膜识别1.opencv3同心圆的提取
  17. 优橙国企招聘会—5G网络优化工程师
  18. 【笔记】boolean和Boolean的区别
  19. 常见SEO顾问服务内容
  20. 华硕电脑如何设置记事本软件窗口置顶

热门文章

  1. gets函数用不了_函数篇:指数函数
  2. log4j slf4j实现_日志那点事儿——slf4j源码剖析
  3. mysql外键约束脚本_使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)...
  4. git reflog
  5. flask 启动服务
  6. opencv 性能测试
  7. css3过渡缓慢排过去,css3过渡
  8. sprintf函数实现_从Go结构成员的升格到面向对象类的实现
  9. Exchange 迁移 Public Folder 公共文件夹
  10. server2012 AD域 radius 802.1x认证