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是一款广泛应用于Java环境中的开源任务调度框架,它的核心功能是允许开发者安排任务在特定的时间点或按照预设的周期执行。这个组件为开发者提供了一种灵活且强大的方式来控制应用程序的执行流程,尤其适合那些...
1. **选择定时任务框架**:常见的定时任务框架有Java的Quartz、Spring Boot的@Scheduled、Python的APScheduler等。以Spring Boot为例,我们可以通过在配置文件(如application.yml或application.properties)中设置...
- **Java的Quartz Scheduler**:这是一个流行的企业级定时任务框架,适合在Java应用中实现复杂的调度需求。 - **Python的APScheduler**:对于Python开发者,APScheduler提供了一个轻量级且灵活的定时任务库。 - **...
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. **邮件模板**:对于批量发送或需要保持一致性的邮件,可以...
4. **定时任务**:为了实现自动采集,通常需要将代码与定时任务结合,如Python的`APScheduler`,Java的`Quartz Scheduler`,或者Node.js的`node-cron`,这样可以定期检查RSS源更新。 5. **数据存储**:采集到的新闻...
例如,在Python中可以使用`APScheduler`库,Java中可以使用`Quartz`框架,设定在特定时间执行发送消息的函数。 3. **消息推送流程**: - **构建消息结构**:首先,需要按照微信企业号的消息格式构建消息内容,包括...
同时,为了实现定时发送,开发者可能用到了任务调度库,如Python的`APScheduler`或Java的`Quartz`。 总之,“新浪微博爱情表白代码”是一个结合了微博API、认证授权、HTTP请求和创意编程的项目。通过学习和实践此类...
服务器端,我们可以选择多种编程语言来实现scheduler,如Python的APScheduler库,Node.js的node-cron模块,或者是Java的Quartz Scheduler。这些库或框架提供了丰富的API,可以方便地创建、修改和删除定时任务。它们...
11. **定时任务**:Linux Crontab、Java Quartz或Python APScheduler可用于定时任务调度。 12. **用户验证方案**:HTTPS协议确保通信安全,同时采用密钥和令牌机制增强用户验证。 13. **通信安全**:URL签名和AES...