使用Python快速实现一个高级定时任务

Python定时方法可以适用的场景:

第一种,用Python定期执行一些后台任务,比如说清理缓存,更新数据,发送通知等;

第二种,用Python定时触发一些事件,比如启动或停止某些服务,执行某些命令,调用某些接口等等;

第三种,通过Python实现一些定时功能,比如说闹钟,倒计时,计时器任务等等。

最后,也可以通过Python模拟一些异步或并发的行为,比如说模拟用户的请求,测试程序的性能,生成一些随机数据等等多种方面。

说的再多,不如直接通过案例来说明。

比如说,现在我们通过Python来创建重复执行的定时任务。如果我们想要创建一个重复执行的定时器任务,这里可以选择使用threading模块的Timer类,并在回调函数中重新创建并启动一个新的定时器任务。

示例如下所示,我们用下面的代码创建了一个每隔5秒打印一条消息的定时任务:

scss 复制代码
import threading


def demo():
    print("Hello, Copilot!")
    # 创建并启动一个新的定时器
    timer = threading.Timer(5, demo)
    timer.start()


# 创建并启动第一个定时器
timer = threading.Timer(5, demo)
timer.start()

总的来说,就是先调用demo实现启动,如何在demo内部实现再次调用,这样就可以减少非必要的代码冗余。

那么,有同学可能想问了,那我们如何在执行过程中去取消它或者是修改这个定时任务呢?

如果说,我们想要取消或修改一个已经创建的定时任务,可以使用Timer类的cancel()方法或者sched模块的scheduler类的cancel()方法去实现。

举个例子,我们可以通过下面的代码,创建一个在8秒后打印一条消息的定时任务,但是我们在5秒之后就自动把它取消掉:

python 复制代码
import threading
import time


def demo():
    print("Hello, Copilot!")


# 创建一个定时任务
timer = threading.Timer(8, demo)
timer.start()


# 等待 5 秒
time.sleep(5)


# 取消定时器
timer.cancel()

除此之外,我们还需要注意到一种情况。

如果我们的定时任务中,它的回调函数中发生了异常或者错误提示,这个时候可以使用try...except语句来捕获并处理它们。具体需要怎么做呢?

我们再举个例子,可以通过下面的代码创建一个定时任务,它的回调函数中故意抛出了一个异常错误,并在except语句中打印了异常信息,如下所示:

python 复制代码
import threading


def demo():
    # 抛出一个异常
    raise Exception("Something went wrong!")


# 创建一个定时任务
timer = threading.Timer(5, demo)
timer.start()


# 捕获并处理异常
try:
    timer.join()
except Exception as error:
    print("Error:", error)
相关推荐
MoRanzhi12032 分钟前
第5篇(上)· 使用 PyQt5 实现 2048 算法求解版:五类搜索算法内核
python·启发式算法·强化学习·搜索算法·蒙特卡洛树搜索·2048游戏·expectimax
星川皆无恙6 分钟前
基于知识图谱的百科问答系统:Django + Neo4j 与实现
人工智能·python·机器学习·自然语言处理·django·知识图谱·neo4j
qq_448011167 分钟前
EXEC字典沙箱仅是名字空间隔离,模块和解释器仍共享带来的坑
python
打工仔折腾 AI11 分钟前
介入式脑机接口的跨尺度解码与闭环调控:从算法落地到后端工程实践
人工智能·后端·python·深度学习·算法·ai agent 实战
FITA阿泽要努力22 分钟前
/goal 命令:给 Agent 设定目标
服务器·人工智能·python·agent
小小张说故事43 分钟前
Python 的 dict 为什么插入顺序不会乱?拆开 3.6 的紧凑布局:indices 与 entries 两张表
python
椰萝Yerosius44 分钟前
严正声明 | 博主已正式放弃CSDN作为博客平台
python
肖永威1 小时前
python版微电网仿真工具的前端托管选型:从http.server到FastAPI StaticFiles
前端·python·http·fastapi
lg_cool_1 小时前
Python 代码打包
开发语言·python
2601_962885721 小时前
如何用 Python 做 MACD 金叉全市场选股?
开发语言·python