`

强大的python 定时任务框架 APScheduler 类似java的Quartz

 
阅读更多

http://blog.sina.com.cn/s/blog_9f2dd2f301014rrv.html

 

 

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

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

[plain] view plaincopyprint?

easy_install apscheduler  

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

[plain] view plaincopyprint?

python setup.py install  

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

[python] view plaincopyprint?

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 plaincopyprint?

Jobs are always executed in non-daemonic threads.  

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

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

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

[python] view plaincopyprint?

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')<span style="white-space:pre">    </span># 别名是mongo  

 

@sched.cron_schedule(second='*', day_of_week='0-4', hour='9-12,13-15', jobstore='mongo')<span style="white-space:pre">  </span># 向别名为mongo的jobstore添加job  

def job():  

        print 'a job'  

        time.sleep(1)  

  

sched.start()  

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

[plain] view plaincopyprint?

> 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")  

}  

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

 

分享到:
评论

相关推荐

    Quartz组件实现定时任务

    Quartz是一款广泛应用于Java环境中的开源任务调度框架,它的核心功能是允许开发者安排任务在特定的时间点或按照预设的周期执行。这个组件为开发者提供了一种灵活且强大的方式来控制应用程序的执行流程,尤其适合那些...

    直接配置执行定时任务的一整套方法

    1. **选择定时任务框架**:常见的定时任务框架有Java的Quartz、Spring Boot的@Scheduled、Python的APScheduler等。以Spring Boot为例,我们可以通过在配置文件(如application.yml或application.properties)中设置...

    定时任务执行器

    - **Java的Quartz Scheduler**:这是一个流行的企业级定时任务框架,适合在Java应用中实现复杂的调度需求。 - **Python的APScheduler**:对于Python开发者,APScheduler提供了一个轻量级且灵活的定时任务库。 - **...

    定时任务相关技术实操-timed-task-practice.zip

    3. **Quartz (Java)**:一个开源的Java定时任务框架,可实现复杂的时间调度。 4. **Celery (Python)**:一个分布式任务队列,支持定时任务和异步任务。 5. **Spring Framework (Java)**:Spring的Task模块提供了...

    定时任务实现

    除了Spring,Quartz也是一个强大的定时任务库,它可以精细控制任务调度,并支持集群环境。Quartz使用`Job`和`Trigger`的概念,通过配置XML或API来创建和调度任务。 在Python中,我们可以使用APScheduler库来实现...

    定时执行程序逻辑

    - **编程语言库**:许多编程语言都有库或框架支持定时任务,例如Python的APScheduler、Java的Quartz等。 - **云服务定时器**:在云计算环境中,如AWS Lambda、Google Cloud Functions或Azure Functions,可以设置...

    定时发短信

    在Java中,可以使用`Quartz`或`Spring Task`来实现定时任务;如果是Python,可以利用`APScheduler`或者`schedule`库。开发者需要编写定时任务逻辑,确保在指定时间触发短信发送。 2. **数据库操作**:描述中提到...

    定时重启程序

    实现这样的定时重启功能,一般会用到编程语言中的定时任务库或框架,如Java的Quartz、Python的APScheduler或C#的Hangfire。这些库提供了调度任务的能力,能够根据预定的时间触发事件,例如执行重启程序的函数。在...

    定时器(简单的定时功能)

    - **第三方库/框架**:许多编程语言有专门处理定时任务的库,如Python的APScheduler,Java的Quartz Scheduler等。 4. **事件驱动编程**: 定时器在事件驱动编程模型中扮演重要角色。当定时器触发时,会向事件队列...

    实现方正教务管理系统的教学质量评价批量自动评价

    在实现自动化流程时,可以借助任务调度框架(如Python的APScheduler或Java的Quartz),设定定时任务自动执行评价计算。 最后,评价结果需要以直观易懂的方式展示,这可能涉及数据可视化技术,如使用Matplotlib或...

    自动发送邮件

    9. **定时任务**:如果需要定期发送邮件,可以使用定时任务库,比如Python的`APScheduler`,Java的`Quartz Scheduler`,或者Windows的任务计划程序。 10. **邮件模板**:对于批量发送或需要保持一致性的邮件,可以...

    rss新闻自动采集原码

    4. **定时任务**:为了实现自动采集,通常需要将代码与定时任务结合,如Python的`APScheduler`,Java的`Quartz Scheduler`,或者Node.js的`node-cron`,这样可以定期检查RSS源更新。 5. **数据存储**:采集到的新闻...

    微信企业号推送消息

    例如,在Python中可以使用`APScheduler`库,Java中可以使用`Quartz`框架,设定在特定时间执行发送消息的函数。 3. **消息推送流程**: - **构建消息结构**:首先,需要按照微信企业号的消息格式构建消息内容,包括...

    新浪微博 爱情表白 代码

    同时,为了实现定时发送,开发者可能用到了任务调度库,如Python的`APScheduler`或Java的`Quartz`。 总之,“新浪微博爱情表白代码”是一个结合了微博API、认证授权、HTTP请求和创意编程的项目。通过学习和实践此类...

    scheduler

    服务器端,我们可以选择多种编程语言来实现scheduler,如Python的APScheduler库,Node.js的node-cron模块,或者是Java的Quartz Scheduler。这些库或框架提供了丰富的API,可以方便地创建、修改和删除定时任务。它们...

    APP开发架构规划.docx

    11. **定时任务**:Linux Crontab、Java Quartz或Python APScheduler可用于定时任务调度。 12. **用户验证方案**:HTTPS协议确保通信安全,同时采用密钥和令牌机制增强用户验证。 13. **通信安全**:URL签名和AES...

Global site tag (gtag.js) - Google Analytics