关于python定时器的一些思路分享
共 1167字,需浏览 3分钟
·
2021-09-01 03:23
定时器大家肯定都不陌生
就是让代码在指定时间去执行任务
那假如让你设计一个定时器
你会怎么写呢
是不是这样
这个代码很简单
就是死循环每次休眠1s
然后每次都获取当前时间
跟指定时间做比较
相同就执行任务
这里是每次休眠1s
如果你想只精确到分
那你可以延长休眠时间
然后修改获取本地时间的格式
这样即可
然后每次可以休眠长一点
例如30s,或者60s以内
这样做确实没问题
但,
你有没有觉得有点麻烦
而且这是在考虑代码的延迟基本为0的情况
如果你要精确到秒
那么是不是可能会出现一点点偏差
有这个可能性,但不大
主要问题在哪里
这个死循环
着实看起来不是那么漂亮
又或者
假如我规定只需要工作日执行
或者只要哪个时间段执行
或者我规定多少时间执行一次
那这个逻辑是不是就麻烦了许多
因为最近项目需求
我也感觉到了这种方法的繁琐
于是就在寻找
有没有这样一种框架
可以异步定时执行任务
而且逻辑简单
功夫不负有心人
我觉得这个是肯定存在的
不可能不存在这个东西
于是乎,
这个出现了
apscheduler
apscheduler的简单介绍
总之就是
比较nice
安装方式:
pip install apscheduler
然后过多的操作我也不多说了
随便搜两篇帖子就看懂了
简单介绍几种方式
直接看图片即可
很简单
有三种方式
date,cron,interval
指定日期时间执行一次
指定时间每天执行
间隔时间执行
更多说明可以看官方文档
https://apscheduler.readthedocs.io/en/stable/
还可以指定工作日,开始时间,结束时间,指定日期等等
反正我用了是感觉非常方便
但
有一个大问题
如果就按照我刚才这样写
你会发现
假如你下面还有代码
像这样
你会发现
这下面的是不会执行的
运行结果是这样
原因就是
他是堵塞的
!
很明显
这不是我们想要的结果
所以
这里就要用异步的写法
把他放到一个线程里面去
像这样
那么
就不会阻塞了
运行结果是这样
第一次有4个1是因为第一个1没有休眠
这就看得到效果了
如果用效果更明显的操作
那就是
在要执行的任务里面加休眠
像这样
很明显
这个休眠是异步的
任务里面的休眠
并不会影响你外面函数的正常运行
这个提示是因为
基本上就是,你休眠的时候
定时任务任然在执行
而当前函数又还没执行完
产生的冲突
有解决办法,也比较简单
而且这应该是只在interval才会出现的问题
在date和cron这两种不会出现
好了
更多说明和样例请自行百度吧
网上博客很多
说的更详细
反正用起来
比较简单
也很方便
赶快试试吧~
如果还有问题
可以进读者群
一起讨论哈哈哈
感谢阅读~
欢迎关注公众号:SKpython
-End-