快捷搜索:

[转]Python定时任务框架APScheduler

来源:http://www.shanghai-sourcing.com 作者:真人注册 人气:69 发布时间:2019-11-21
摘要:4.百般管理        当job抛出极度时,APScheduler会默默的把他吞掉,不提供别的提醒,那不是风流浪漫种好的举行,大家亟须明白程序的别的错误。APScheduler提供注册listener,可以监听一

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()能够打字与印刷出特别酒馆音讯。

 

  1. def err_listener(ev):  
  2. [转]Python定时任务框架APScheduler。    err_logger = logging.getLogger('schedErrJob')  
  3.     if ev.exception:  
  4.         err_logger.exception('%s error.', str(ev.job))  
  5.     else:  
  6.         err_logger.info('%s miss', str(ev.job))  
  7.   
  8. 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技巧够。能够通过命令实现关闭脚本:

 

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

 

1. 安装

[转]Python定时任务框架APScheduler。        安装进程相当的轻巧,能够基于easy_install和源码。

  1. easy_install apscheduler  

[转]Python定时任务框架APScheduler。        也许下载源码,运转命令:

  1. python setup.py install  

  APScheduler是基于Quartz的 多个Python准期职分框架,达成了Quartz的装有功用,使用起来十三分有利。提供了基于日期、固如时期间隔以致crontab类型的任务,而且可以长久化职务。基于这几个功用,大家可以很便利的落实多少个python准期职务系统,写python仍旧要比java舒性格很顽强在艰难困苦或巨大压力面前不屈多了。

3. Store

        APScheduler提供了jobstore用于存款和储蓄job的推行消息,暗许使用的是RAMJobStore,还提供了 SQLAlchemyJobStore、ShelveJobStore和MongoDBJobStore。APScheduler允许同不经常间使用两个jobstore,通过小名(alias卡塔尔国区分,在增加job时索要钦定具体的jobstore的别称,不然使用的是外号是default的 jobstore,即RAMJobStore。下边以MongoDBJobStore比如表达。

 

  1. import pymongo  
  2. from apscheduler.scheduler import Scheduler  
  3. from apscheduler.jobstores.mongodb_store import MongoDBJobStore  
  4. import time  
  5.   
  6. sched = Scheduler(daemonic = False)  
  7.   
  8. mongo = pymongo.Connection(host='127.0.0.1', port=27017)  
  9. store = MongoDBJobStore(connection=mongo)  
  10. sched.add_jobstore(store, 'mongo')        # 别名是mongo  
  11.  
  12. @sched.cron_schedule(second='*', day_of_week='0-4', hour='9-12,13-15', jobstore='mongo')        # 向别称称叫mongo的jobstore增多job  
  13. def job():  
  14.         print 'a job'  
  15.         time.sleep(1)  
  16.   
  17. sched.start()  

        注意start必得在增添job动作之后调用,不然会抛错。暗中认可会把job消息保存在apscheduler数据库下的jobs表:

 

  1. > db.jobs.findOne()  
  2. {  
  3.         "_id" : ObjectId("502202d1443c1557fa8b8d66"),  
  4.         "runs" : 20,  
  5.         "name" : "job",  
  6.         "misfire_grace_time" : 1,  
  7.         "coalesce" : true,  
  8.         "args" : BinData(0,"gAJdcQEu"),  
  9.         "next_run_time" : ISODate("2012-08-08T14:10:46Z"),  
  10.         "max_instances" : 1,  
  11.         "max_runs" : null,  
  12.         "trigger" : BinData(0,"gAJjYXBzY2hlZHVsZXIudHJpZ2dlcnMuY3JvbgpDcm9uVHJpZ2dlcgpxASmBcQJ9cQMoVQZmaWVsZHNxBF1xBShjYXBzY2hlZHVsZXIudHJpZ2dlcnMuY3Jvbi5maWVsZHMKQmFzZUZpZWxkCnEGKYFxB31xCChVCmlzX2RlZmF1bHRxCYhVC2V4cHJlc3Npb25zcQpdcQtjYXBzY2hlZHVsZXIudHJpZ2dlcnMuY3Jvbi5leHByZXNzaW9ucwpBbGxFeHByZXNzaW9uCnEMKYFxDX1xDlUEc3RlcHEPTnNiYVUEbmFtZXEQVQR5ZWFycRF1YmgGKYFxEn1xEyhoCYhoCl1xFGgMKYFxFX1xFmgPTnNiYWgQVQVtb250aHEXdWJjYXBzY2hlZHVsZXIudHJpZ2dlcnMuY3Jvbi5maWVsZHMKRGF5T2ZNb250aEZpZWxkCnEYKYFxGX1xGihoCYhoCl1xG2gMKYFxHH1xHWgPTnNiYWgQVQNkYXlxHnViY2Fwc2NoZWR1bGVyLnRyaWdnZXJzLmNyb24uZmllbGRzCldlZWtGaWVsZApxHymBcSB9cSEoaAmIaApdcSJoDCmBcSN9cSRoD05zYmFoEFUEd2Vla3EldWJjYXBzY2hlZHVsZXIudHJpZ2dlcnMuY3Jvbi5maWVsZHMKRGF5T2ZXZWVrRmllbGQKcSYpgXEnfXEoKGgJiWgKXXEpY2Fwc2NoZWR1bGVyLnRyaWdnZXJzLmNyb24uZXhwcmVzc2lvbnMKUmFuZ2VFeHByZXNzaW9uCnEqKYFxK31xLChoD05VBGxhc3RxLUsEVQVmaXJzdHEuSwB1YmFoEFULZGF5X29mX3dlZWtxL3ViaAYpgXEwfXExKGgJiWgKXXEyKGgqKYFxM31xNChoD05oLUsMaC5LCXViaCopgXE1fXE2KGgPTmgtSw9oLksNdWJlaBBVBGhvdXJxN3ViaAYpgXE4fXE5KGgJiGgKXXE6aAwpgXE7fXE8aA9Oc2JhaBBVBm1pbnV0ZXE9dWJoBimBcT59cT8oaAmJaApdcUBoDCmBcUF9cUJoD05zYmFoEFUGc2Vjb25kcUN1YmVVCnN0YXJ0X2RhdGVxRE51Yi4="),  
  13.         "func_ref" : "__main__:job",  
  14.         "kwargs" : BinData(0,"gAJ9cQEu")  
  15. }  

        上边正是累积的现实新闻。

2. cron job例子

        APScheduler是进度内的调治器,能够定时触发具体的函数,并且能够访谈应用的装有变量和函数。在web应用中经过APScheduler完成依期职务是很有利的。上边看例子:

  1. from apscheduler.scheduler import Scheduler  
  2.   
  3. schedudler = Scheduler(daemonic = False)  
  4.  
  5. @schedudler.cron_schedule(second='*', day_of_week='0-4', hour='9-12,13-15')  
  6. def quote_send_sh_job():  
  7.     print 'a simple cron job start at', datetime.datetime.now()  
  8.   
  9. schedudler.start()  

        下边通过装饰器定义了cron job,能够经过函数scheduler.add_cron_job增加,用装饰器更方便人民群众。Scheduler构造函数中传唱daemonic参数,表示实行线程是非守护的,在Schduler的文书档案中引入使用非守护线程:

  1. Jobs are always executed in non-daemonic threads.  

        具体cron job的布局参看doc,基本上与Quartz生机勃勃致。

        在增添job时还应该有多少个超重大的参数max_instances,钦赐叁个job的并发实例数,默许值是1。暗许景况下,要是壹个job策动试行,但是该job的前二个实例还没有实践完,则后叁个job会失利,能够透过那些参数来退换这种状态。

本文由金沙澳门官网55网址发布于真人注册,转载请注明出处:[转]Python定时任务框架APScheduler

关键词:

最火资讯