Python定时计划任务探究,如何实现到点运行py任务脚本
不少大佬哥应该有着这样一个应用场景,即到点跪舔女神,给女大佬问好,带早餐,备胎计划??而在实际网络中,也有着不少定时定点计划任务需要运行,这在运维当中非常常见,也非常重要!身为技术渣想要实现到点运行py任务脚本,比如说每天某个时间点准时运行爬取91新片以及精彩评论,兴趣让渣渣有研究的动力,这就有了下面这篇水文!!
方法一:宝塔面板计划任务
如果你的服务器恰好装有宝塔面板,那么,你不妨试试宝塔的计划任务!
选择shell脚本,设置好相关参数
输入命令 python /www/wwwroot/py91.py
注意:脚本内容 python /www/wwwroot/域名/文件绝对路径
其实就是跟windows调用cmd命令一样哈!
到点即可运行py文件!
这简直就是LSP们的最爱设置了,有没有??!!
方法二:python代码实现
-
方式一:while循环+sleep
超级简单粗暴的方式,即 while True + time.sleep(s),s即为间隔方式!
参考demo:
from datetime import datetime import time # 每n秒执行一次 def timer(n): while True: print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) time.sleep(n) # 5s timer(5)
优点:当然是简单方便,连本渣渣都会!
缺点:大佬说是耗服务器性能,想想也是,其实是一直在阻塞运行,至于多耗性能就不得而知了!
-
方式二:threading模块中的Timer
这个本渣渣没有用过,大佬哥们可以尝试看看!
参考demo:
from datetime import datetime from threading import Timer # 打印时间函数 def printTime(inc): print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) t = Timer(inc, printTime, (inc,)) t.start() # 5s printTime(5)
-
方式三:使用sched模块
模块是 Python 内置的模块,它是一个调度(延时处理机制),每次想要定时执行某任务都必须写入一个调度。
本渣渣现在瞎几把用的方法,其实源码没怎么研究,改着用着先了。。
参考demo:
import sched import time from datetime import datetime # 初始化sched模块的 scheduler 类 # 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。 schedule = sched.scheduler(time.time, time.sleep) # 被周期性调度触发的函数 def printTime(inc): print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) schedule.enter(inc, 0, printTime, (inc,)) # 默认参数60s def main(inc=60): # enter四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数, # 给该触发函数的参数(tuple形式) schedule.enter(0, 0, printTime, (inc,)) schedule.run() # 10s 输出一次 main(10)
运行效果,改为5s运行一次!
关于其挂机服务器占用性能,仅供参考,毕竟只是一个小小的爬取脚本!
附:高端,框架方法,本渣渣头秃了,大佬哥们自行尝试研究吧!