自动化运维?看看Python怎样完成自动任务调度⛵

简介: 本文讲解如何使用Python的schedule库完成自动化调度程序,通过代『发送邮件』这一代码实例展示了构建任务与任务调度的全过程。
033ba1686294138aae8933afa4f31a7e.png
💡 作者: 韩信子@ ShowMeAI
📘 Python3◉技能提升系列https://www.showmeai.tech/tutorials/56
📘 本文地址https://www.showmeai.tech/article-detail/323
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏 ShowMeAI查看更多精彩内容
ef52563da043349ae0fdec48f8dd6dd1.png

计划任务是几乎每个开发人员都会用到的功能,在服务器上可以用 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="showmeai@yeah.net")
def send_email(email="default_email@yeah.net"):
    # 发送邮件的操作可以加在这里
    print(f"Sending email...: to {email}")

经过上面的简单处理,我们可以把电子邮箱当作参数传递给调度任务。如果我们希望通过命令行参数给脚本传参,一个示例的代码如下:

import argparse

def send_email(email="default_email@yeah.net"):
    # 发送邮件的操作可以加在这里
    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 showmeai@yeah.net

# 我们也可以使用默认的邮箱参数
$ python send_email.py

💡 总结

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

参考资料

e9190f41b8de4af38c8a1a0c96f0513b~tplv-k3u1fbpfcp-zoom-1.image

目录
相关文章
|
16天前
|
运维 Unix 应用服务中间件
自动化运维:使用Ansible简化日常任务
【8月更文挑战第4天】在现代IT架构中,自动化运维成为提升效率、减少人为错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化日常的运维任务,通过实际代码示例,展示配置管理、软件部署和系统更新等操作。我们将探索如何利用Ansible的简洁语法和强大功能来优化工作流程,从而为读者提供一套实用的自动化解决方案。
|
15天前
|
运维 算法 数据可视化
【2021 高校大数据挑战赛-智能运维中的异常检测与趋势预测】2 方案设计与实现-Python
文章详细介绍了参加2021高校大数据挑战赛中智能运维异常检测与趋势预测任务的方案设计与Python实现,包括问题一的异常点和异常周期检测、问题二的异常预测多变量分类问题,以及问题三的多变量KPI指标预测问题的算法过程描述和代码实现。
32 0
|
2天前
|
机器学习/深度学习 人工智能 运维
智能运维:未来趋势下的自动化与人工智能融合
【8月更文挑战第18天】 在数字化浪潮中,智能运维(AIOps)作为一股不可逆转的力量,正逐步改写传统运维的脚本。本文将探讨AIOps的核心要素、实施路径和面临的挑战,同时分享个人从新手到专家的心路历程,旨在启发读者思考如何在这一领域内持续成长并作出贡献。
12 6
|
4天前
|
运维 持续交付 网络安全
自动化运维:Ansible与Terraform的比较
【8月更文挑战第16天】Ansible和Terraform都是自动化运维领域的重要工具,它们各自以其独特的功能和优势在市场中占据了一席之地。在选择使用哪个工具时,用户应根据自己的实际需求和应用场景进行综合考虑。如果主要关注系统配置管理和应用程序部署,那么Ansible可能是一个更好的选择;如果主要关注基础设施的自动化部署和管理,那么Terraform可能更适合您的需求。
|
10天前
|
运维 Linux Apache
【一键变身超人!】Puppet 自动化运维神器 —— 让你的服务器听话如婴儿,轻松管理资源不是梦!
【8月更文挑战第9天】随着云计算与容器化技术的发展,自动化运维已成为现代IT基础设施的核心部分。Puppet是一款强大的自动化工具,用于配置管理,确保系统保持预期状态。通过易于理解的配置文件定义资源及其依赖关系,Puppet实现了“基础设施即代码”的理念。本文简要介绍了Puppet的安装配置方法及示例,包括Puppet Agent与Master的安装、基本配置步骤和一个简单的Apache HTTP Server管理示例,展示了Puppet在实际应用中的强大功能与灵活性。
23 9
|
4天前
|
机器学习/深度学习 人工智能 运维
自动化运维的新篇章:从脚本到智能化管理
在数字化浪潮中,运维领域迎来了前所未有的挑战与机遇。本文将通过一个运维专家的视角,讲述他如何从一个刚毕业的迷茫青年成长为行业内的佼佼者。文章不仅分享技术成长之路,更深入探讨自动化运维的演变历程,以及它如何重塑IT行业的未来。
|
6天前
|
运维 监控 Devops
构建高效自动化运维体系:DevOps与容器化实践
【7月更文挑战第44天】在现代IT基础设施管理中,自动化运维已成为提升效率、降低成本、确保系统稳定性的关键。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系。我们将分析这一体系对提高软件交付速度、优化资源利用率以及增强系统可靠性的积极影响,并提供一系列实施策略和最佳实践,帮助企业实现运维自动化转型。
|
10天前
|
运维 Ubuntu 网络安全
Ansible:自动化运维的魔法棒,让复杂工作变得如此简单!
【8月更文挑战第9天】在现代IT运维中,自动化工具不可或缺。Ansible是一款流行的开源工具,以其简洁高效著称。它基于Python,使用YAML编写剧本,通过SSH与远程主机交互,无需安装代理。核心组件包括引擎、剧本、模块等。安装简易,如在Ubuntu上可通过添加PPA后使用`apt-get`命令。通过编写Playbook,如安装并启动Apache2服务的例子所示,可轻松实现自动化任务。Ansible的强大功能和灵活性使其成为提高运维效率的理想选择。
45 6
|
10天前
|
运维 监控 持续交付
"揭秘Puppet:自动化运维的超级英雄,一键驾驭复杂IT环境,让运维繁琐瞬间灰飞烟灭,引领未来运维新纪元!"
【8月更文挑战第9天】Puppet作为自动化运维的杰出代表,凭借其强大的配置管理和高度可定制性,助力IT运维实现自动化与智能化转型。通过定义资源模型与使用声明式语言描述系统状态,Puppet能自动调整系统至期望状态,实现标准化运维流程。其工作流程包括定义-应用-报告三步,支持从服务器配置到复杂网络、数据库管理等多种场景。示例代码展示了如何自动化部署Apache服务器,体现了Puppet在实际操作中的高效与便捷。随着技术演进与社区壮大,Puppet将持续推动运维领域的创新发展。
28 6
|
10天前
|
运维 应用服务中间件 Apache
震撼登场!Ansible roles 化身自动化运维神器,打破传统束缚,开启运维新时代!
【8月更文挑战第9天】Ansible是一款强大的自动化运维工具,其Roles功能将复杂任务分解为可复用模块,提升代码的可读性、可维护性和可扩展性。通过创建结构化的目录,如tasks、handlers和vars等,可以清晰地组织配置与任务。例如,为Web服务器创建一个Role,包含安装Apache、启动服务等任务,并可在不同的Playbook中重复使用此Role,简化大型集群的配置管理工作,提高效率和质量。
25 6