首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
36 篇文章
1
数据分析大作战,SQL V.S. Python,来看看这些考题你都会吗 ⛵
2
数据科学手把手:碳中和下的二氧化碳排放分析 ⛵
3
面试现场!月薪3w+的这些数据挖掘SQL面试题你都掌握了吗? ⛵
4
员工离职困扰?来看AI如何解决,基于人力资源分析的 ML 模型构建全方案 ⛵
5
AI 音辨世界:艺术小白的我,靠这个AI模型,速识音乐流派选择音乐 ⛵
6
数据专家最常使用的 10 大类 Pandas 函数 ⛵
7
钻石价格预测的ML全流程!从模型构建调优道部署应用!⛵
8
掌握这9个单行代码技巧!你也能写出『高端』Python代码 ⛵
9
刘畊宏男孩女孩看过来!运动数据分析挖掘!⛵
10
二手车价格预测 | 构建AI模型并部署Web应用 ⛵
11
看看你离世界一流大厂有多远?3道Google最新SQL面试题 ⛵
12
客户流失?来看看大厂如何基于spark+机器学习构建千万数据规模上的用户留存模型 ⛵
13
再见 Excel,你好 Python Spreadsheets! ⛵
14
羡慕 Excel 的高级选择与文本框颜色呈现?Pandas 也可以拥有!! ⛵
15
2022了你还不会『低代码』?数据科学也能玩转Low-Code啦! ⛵
16
Pandas数据显示不全?快来了解这些设置技巧! ⛵
17
一键自动化数据分析!快来看看 2022 年最受欢迎的 Python 宝藏工具库! ⛵
18
羡慕实时数据看板?来看看Python的交互数据分析可视化工具!
19
自动化运维?看看Python怎样完成自动任务调度⛵
20
森林野火故事2.0:一眼看穿!使用 Panel 和 hvPlot 可视化 ⛵
21
异常值检测!最佳统计方法实践(代码实现)!⛵
22
大数据开发!Pandas转spark无痛指南!⛵
23
还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
24
业务数据分析最佳案例!旅游业数据分析!⛵
25
Pandas中你一定要掌握的时间序列相关高级功能 ⛵
26
求职指南!给数据开发的SQL面试准备路径!⛵
27
Python中内置数据库!SQLite使用指南! ⛵
28
私藏!资深数据专家SQL效率优化技巧 ⛵
29
Pandas太慢?快使用Vaex DataFrame,每秒数亿数据算起来 ⛵
30
高手系列!数据科学家私藏pandas高阶用法大全 ⛵
31
『航班乘客满意度』场景数据分析建模与业务归因解释 ⛵
32
数据科学家赚多少?基于pandasql和plotly的薪资分析与可视化 ⛵
33
深度解析数据清理和特征工程!5本面向数据科学家的顶级书籍推荐 ⛵
34
就离谱!使用机器学习预测2022世界杯:小组赛挺准,但冠亚季军都错了 ⛵
35
百倍加速IO读写!快使用Parquet和Feather格式!⛵
36
交互式仪表板!Python轻松完成!⛵

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

本文讲解如何使用Python的schedule库完成自动化调度程序,通过代『发送邮件』这一代码实例展示了构建任务与任务调度的全过程。


💡 作者:韩信子@ShowMeAI

📘 Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56

📘 本文地址:https://www.showmeai.tech/article-detail/323

📢 声明:版权所有,转载请联系平台与作者并注明出处

📢 收藏ShowMeAI查看更多精彩内容

计划任务是几乎每个开发人员都会用到的功能,在服务器上可以用 Cron 作业来进行任务调度,它也是一种稳定的方式。但我们也可以完全程序化,全部使用 Python 来完成调度程序,而且可以有更简单的配置方式。

💡 基于 Python 的任务调度

📌 快速安装与应用

Python工具包 📘schedule可以轻松地在 Python 中进行任务调度,我们可以通过 PyPI 快速安装它。

代码语言:txt
复制
$ pip install schedule

借助于 schedule,我们几乎可以像用自然语言说话一样快速构建任务计划和时间表。比如,你想每小时运行一次某个功能函数(比如功能是发邮件的函数send_email) ,写法是这样的:

代码语言:python
复制
schedule.every().hour.do(send_email)

整个过程非常程序化和自然,完整的一个『构建任务+任务调度』程序如下(我们把每小时发送一次邮件调整为每天一次了)。

代码语言:python
复制
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 工具包支持开箱即用的装饰器。我们把上面发送电子邮件的示例改用装饰器完成,代码如下。

代码语言:python
复制
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 秒调用一次。

📌 使用参数运行计划任务

我们有时候会希望任务的调用更灵活一些,比如如果可以通过传递参数来控制任务调度,那就免去了写死各种细节的问题。下面我们把发邮件的任务写成可接受参数的形式:

代码语言:python
复制
@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}")

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

代码语言:python
复制
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()

接下来我们就可以在终端中运行上述脚本,如下所示:

代码语言:txt
复制
$ python send_mail.py -e showmeai@yeah.net

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

💡 总结

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

参考资料

下一篇
举报
领券