不少大佬哥应该有着这样一个应用场景,即到点跪舔女神,给女大佬问好,带早餐,备胎计划??而在实际网络中,也有着不少定时定点计划任务需要运行,这在运维当中非常常见,也非常重要!身为技术渣想要实现到点运行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运行一次!
关于其挂机服务器占用性能,仅供参考,毕竟只是一个小小的爬取脚本!
附:高端,框架方法,本渣渣头秃了,大佬哥们自行尝试研究吧!
定时任务框架APScheduler
参考来源:
Python 实现定时任务
https://www.cnblogs.com/yblackd/p/13359769.html
·················END·················