APP下载
报价宝  ›  科技  › 

用于python的定时任务apscheduler的使用

报价宝 来源:baojiabao.com 发布时间:2019-10-17 07:51:00 11月09日更新
报价宝综合消息用于python的定时任务apscheduler的使用

最近在专案中有一个比较特殊的需求,要求在每个月第二个周二暂停任务,然后周三再开启

于是在网上查了一下,python中有一个apscheduler库可以实现,而且这个框架还挺强大的

这里记录一下它的使用

安装

我一开始在python2.6中安装的,但是安装有错误,估计是支援不好,在python2.7中是可以的

pip install apscheduler -i https://pypi.douban.com/simple

安装过程中会额外安装一个pytz的库,是关于timezone的

基础概念 参考 http://debugo.com/apscheduler/

触发器(trigger)包含排程逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会执行。除了他们自己初始配置意外,触发器完全是无状态的。

作业储存(job store)储存被排程的作业,预设的作业储存是简单地把作业储存在内存中,其他的作业储存是将作业储存在数据库中。一个作业的资料讲在储存在持久化作业储存时被序列化,并在载入时被反序列化。排程器不能分享同一个作业储存。

执行器(executor)处理作业的执行,他们通常通过在作业中提交制定的可呼叫物件到一个执行绪或者进城池来进行。当作业完成时,执行器将会通知排程器。

排程器(scheduler)是其他的组成部分。你通常在应用只有一个排程器,应用的开发者通常不会直接处理作业储存、排程器和触发器,相反,排程器提供了处理这些的合适的界面。配置作业储存和执行器可以在排程器中完成,例如新增、修改和移除作业。

你需要选择合适的排程器,这取决于你的应用环境和你使用APScheduler的目的。通常最常用的两个:

– BlockingScheduler: 当排程器是你应用中唯一要执行的东西时使用。

– BackgroundScheduler: 当你不执行任何其他框架时使用,并希望排程器在你应用的后台执行。

最主要用的就是scheduler与job store

作业储存

一般储存分为内存储存和持久化的储存,推荐使用持久化的储存,这样一旦主机挂了或者重启了,这样只要重新执行指令码就可以接着运行了,我这里使用的是mongodb来储存。

排程器

任务的执行排程工作由其来完成,主要用到的有BlockingScheduler(阻塞的),BackgroundScheduler(非阻塞的)

一个简单的例子,每隔5s锺输出‘hello world’,每天的13点50分输出‘i m blocking task’

执行指令码发现报错了。。。

pytz.exceptions.UnknownTimeZoneError: u'Can not find timezone China Standard time'

有的环境是不报这个错误的,如果报的话就手动指定一个时区,指定一个pytz库中定义了的时区,可以在site-packages中检视一下,具体原因没有细追。。。

再次执行该指令码,则可以正常运行了,检视mongo数据库

这里也记录着next_run_time

最终的程式码

几个说明

1、执行的时候会有一些误差,由于我这个mongodb在国外的VPS上,所以在操作的时候就有一些延迟,正常如果很快的话误差不会很大

2、关于timezone,如果有报错的话则要手工的指定,在中国境内可以定义为'Asia/Shanghai'

3、新增作业的时候,型别可以为cron,这个定义和linux中的crontab格式,比较灵活,而且它本身就可以定义第周几进行,第几个星期几等,推荐使用

4、新增作业的时候也可以使用装饰器

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 汽车价格 笔记本价格 小米手机价格 耳机价格 降噪耳机价格