关于python:自动化运维看看Python怎样完成自动任务调度⛵

161次阅读

共计 1944 个字符,预计需要花费 5 分钟才能阅读完成。

💡 作者:韩信子 @ShowMeAI
📘 Python3◉技能晋升系列:https://www.showmeai.tech/tutorials/56
📘 本文地址:https://www.showmeai.tech/article-detail/323
📢 申明:版权所有,转载请分割平台与作者并注明出处
📢 珍藏 ShowMeAI 查看更多精彩内容

打算工作是简直每个开发人员都会用到的性能,在服务器上能够用 Cron 作业来进行任务调度,它也是一种稳固的形式。但咱们也能够齐全程序化,全副应用 Python 来实现调度程序,而且能够有更简略的配置形式。

💡 基于 Python 的任务调度

📌 疾速装置与利用

Python 工具包 📘schedule能够轻松地在 Python 中进行任务调度,咱们能够通过 PyPI 疾速装置它。

$ pip install schedule

借助于 schedule,咱们简直能够像用自然语言谈话一样疾速构建工作打算和时间表。比方,你想每小时运行一次某个性能函数(比方性能是发邮件的函数send_email),写法是这样的:

schedule.every().hour.do(send_email)

整个过程十分程序化和天然,残缺的一个『构建工作 + 任务调度』程序如下(咱们把每小时发送一次邮件调整为每天一次了)。

import time
import schedule


def send_email():
    # 发送邮件的操作能够加在这里
    print("Sending email...")


schedule.every().day.at("14:45").do(send_email)

while True:
    schedule.run_pending()
    time.sleep(1)

下面的代码将在每天下午 14:45 调用 send_email 函数。除书写简略易用之外,schedule 工具库还提供了一系列其余性能。

📌 应用装璜器进行调度

咱们能够应用装璜器让代码更加洁净和优雅。schedule 工具包反对开箱即用的装璜器。咱们把下面发送电子邮件的示例改用装璜器实现,代码如下。

import time
from schedule import repeat, every, run_pending


@repeat(every(10).seconds)
@repeat(every(5).seconds)
def send_email():
    # 发送邮件的操作能够加在这里
    print("Sending email...")


while True:
    run_pending()
    time.sleep(1)

上述代码示例中,咱们为同一个工作定制了两个打算。第一个将每 10 秒调用一次性能函数,第二个将每 5 秒调用一次。

📌 应用参数运行打算工作

咱们有时候会心愿工作的调用更灵便一些,比方如果能够通过传递参数来管制任务调度,那就免去了写死各种细节的问题。上面咱们把发邮件的工作写成可承受参数的模式:

@repeat(every(10).seconds)
@repeat(every(5).seconds, email="[email protected]")
def send_email(email="[email protected]"):
    # 发送邮件的操作能够加在这里
    print(f"Sending email...: to {email}")

通过下面的简略解决,咱们能够把电子邮箱当作参数传递给调度工作。如果咱们心愿通过命令行参数给脚本传参,一个示例的代码如下:

import argparse

def send_email(email="[email protected]"):
    # 发送邮件的操作能够加在这里
    print(f"Sending email...: to {email}")


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("-e", "--email", help="Email to send")

    args = parser.parse_args()

    if args.email:
        send_email(args.email)
    else:
        send_email()

接下来咱们就能够在终端中运行上述脚本,如下所示:

$ python send_mail.py -e [email protected]

# 咱们也能够应用默认的邮箱参数
$ python send_email.py

💡 总结

按计划运行工作是开发过程中的最常见需要之一,零碎自带的 Crontab 很好用,但大家也能够试试用 Python 的 schedule 库,让整个代码流程从性能到自动化任务调度都浑然一体。

参考资料

  • 📘 schedule:https://schedule.readthedocs.io/en/stable/

正文完
 0