Python定时计划任务探究,如何实现到点运行py任务脚本

Python
340
0
0
2022-10-11

不少大佬哥应该有着这样一个应用场景,即到点跪舔女神,给女大佬问好,带早餐,备胎计划??而在实际网络中,也有着不少定时定点计划任务需要运行,这在运维当中非常常见,也非常重要!身为技术渣想要实现到点运行py任务脚本,比如说每天某个时间点准时运行爬取91新片以及精彩评论,兴趣让渣渣有研究的动力,这就有了下面这篇水文!!

方法一:宝塔面板计划任务

如果你的服务器恰好装有宝塔面板,那么,你不妨试试宝塔的计划任务!

img

选择shell脚本,设置好相关参数

输入命令 python /www/wwwroot/py91.py

注意:脚本内容 python /www/wwwroot/域名/文件绝对路径

其实就是跟windows调用cmd命令一样哈!

到点即可运行py文件!

img

这简直就是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运行一次!

img

关于其挂机服务器占用性能,仅供参考,毕竟只是一个小小的爬取脚本!

img

附:高端,框架方法,本渣渣头秃了,大佬哥们自行尝试研究吧!

定时任务框架APScheduler

参考来源:

Python 实现定时任务

https://www.cnblogs.com/yblackd/p/13359769.html

·················END·················