Advanced Python Scheduler(APScheduler)——安装及原理

你在这里

Advanced Python Scheduler(APScheduler)——安装及原理

 
Advanced Python Scheduler(APScheduler)是python任务调度库,可用于指定定时执行的一次性任务或周期性任务。开发者可以根据需求添加或删除待执行的任务。待执行的任务(job)可以存储在内存中,还可以存储在数据库中、Redis中,甚至是大数据任务调度工具Zookeeper中。
一、安装APScheduler
可使用以下方法安装:
1.最好的安装方法是使用用pip安装:
$ pip install apscheduler
2.如果pip无法成功安装,则可以从官网下载APScheduler包(下载地址:https://pypi.python.org/pypi/APScheduler/),并安装:
$ python setup.py install
二、APScheduler基本组件
APScheduler包含四个组件,供用户自由选择,即:scheduler、 job store(s)、 executor(s) 、 trigger(s)。
1.scheduler
scheduler是任务(job)调度器,控制器角色,通过它配置job stores和executors,添加、修改和删除任务。scheduler的主循环(main_loop),其实就是反复检查是不是有到时需要执行的任务。如果有,计算这些每个任务需要运行的时间点,并提交给executor排期运行。
scheduler由于IO模型的不同,有多种内置scheduler供选:
BlockingScheduler scheduler在当前进程的主线程中运行,所以调用start函数会阻塞当前线程,不能立即返回。
BackgroundScheduler 放到后台线程中运行,所以调用start后主线程不会阻塞。
AsyncIOScheduler 使用asyncio模块。
GeventScheduler 使用gevent作为IO模型,和GeventExecutor配合使用。
TornadoScheduler 配合TwistedExecutor,用reactor.callLater完成定时唤醒。
TwistedScheduler 使用tornado的IO模型,用ioloop.add_timeout完成定时唤醒。
QtScheduler 使用QTimer完成定时唤醒。
 
2.job stores
Job stores是任务(jobs)持久化仓库,给scheduler提供一个序列化任务的统一抽象,提供对scheduler中任务的增删改查接口。默认任务保存在内存中,也可将保存在各种数据库中(若任务不存在内存中,则数据序列化后保存到持久后台,从后台加载任务时也要反序列化)。根据存储后台的不同,有以下几种
内置job stores供选:
MemoryJobStore 没有序列化,任务存在内存里,增删改查也都是在内存中操作。
SQLAlchemyJobStore 所有sqlalchemy支持的数据库都可以做为存储后台,增删改查操作转化为对应存储后台的sql语句
MongoDBJobStore 用mongodb作存储后台
RedisJobStore 用Redis作存储后台
 
除了MemoryJobStore外,其他几种都使用pickle做序列化工具。因此,如果不是在用内存做任务存储,则必须确保提供给任务的可执行函数必须是可以被全局访问的,也就是可以通过ref_to_obj反查出来的,否则无法序列化。
使用数据库作任务存储,会创建一张有三个域的的jobs表,分别是:id、 next_run_time、 job_state,其中job_state是任务对象pickle序列化后的二进制,而id和next_run_time则是支持任务的两类查询(按id和按最近运行时间)。
3.executor
APScheduler把任务的执行机制也抽象了,根据IO模型进行选择,不同类型的executor实现自己的_do_submit_job,完成一次实际的任务实例执行。内置executors有:
ProcessPoolExecutor 多进程,可指定进程数,当工作负载为CPU密集型操作时可以考虑使用它来利用多核CPU。
ThreadPoolExecutor 多线程,可指定线程数,默认,可以满足大多数用途。
AsyncIOExecutor  
DebugExecutor  
GeventExecutor  
ProcessPoolExecutor  
ThreadPoolExecutor  
TwistedExecutor  
4.trigger
trigger是抽象“一个任务是何时被触发”的策略,每种trigger实现自己的get_next_fire_time函数。APScheduler提供的trigger包括:
date 一次性指定日期。
interval 在某个时间范围内间隔多长时间执行一次。
cron 和unix crontab格式兼容,最为强大。
 
著作权归作者所有。商业转载请联系本站作者获得授权,非商业转载请注明出处 ZZKOOK

您可能感兴趣的文章

登录以发表评论

评论

零差评

 
106
贝叶斯的头像

我看你是真能!

 
121
林世飞的头像

如果变成学习论坛是不是会更好。

 
109
缘何的头像

个人不是很认同。

 
92
momo的头像

真难。

 
99
momo的头像