立即登录

python定时执行脚本 用于python的定时任务apscheduler的使用

11/28 01:15:10

python定时执行脚本 用于python的定时任务apscheduler的使用

php定时执行脚本_python定时执行脚本_centos 定时执行脚本

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

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

这里记录一下它的使用

安装

我一开始在python2.6中安装的,但是安装有错误python定时执行脚本,估计是支持不好,在python2.7中是可以的

pip install apscheduler -i

python定时执行脚本_php定时执行脚本_centos 定时执行脚本

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

基础概念 参考

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

作业存储(job store)存储被调度的作业python定时执行脚本,默认的作业存储是简单地把作业保存在内存中,其他的作业存储是将作业保存在数据库中。一个作业的数据讲在保存在持久化作业存储时被序列化,并在加载时被反序列化。调度器不能分享同一个作业存储。

执行器(executor)处理作业的运行,他们通常通过在作业中提交制定的可调用对象到一个线程或者进城池来进行。当作业完成时,执行器将会通知调度器。

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

php定时执行脚本_python定时执行脚本_centos 定时执行脚本

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

– BlockingScheduler: 当调度器是你应用中唯一要运行的东西时使用。

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

最主要用的就是scheduler与job store

作业存储

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

python定时执行脚本_php定时执行脚本_centos 定时执行脚本

调度器

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

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

php定时执行脚本_centos 定时执行脚本_python定时执行脚本

运行脚本发现报错了。。。

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

python定时执行脚本_centos 定时执行脚本_php定时执行脚本

php定时执行脚本_centos 定时执行脚本_python定时执行脚本

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

再次运行该脚本,则可以正常运行了,查看mongo数据库

这里也记录着next_run_time

python定时执行脚本_centos 定时执行脚本_php定时执行脚本

centos 定时执行脚本_php定时执行脚本_python定时执行脚本

最终的代码

centos 定时执行脚本_php定时执行脚本_python定时执行脚本

几个说明

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

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

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

4、添加作业的时候也可以使用装饰器

来源:【九爱网址导航www.fuzhukm.com】 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

最新资讯