Python 定时任务入门:让脚本每天定时自动执行的正确姿势

举报
yd_227985793 发表于 2026/10/24 09:40:26 2026/10/24
【摘要】 schedule 是 Python 里最轻量的定时任务库。本文从安装、最小可运行示例讲到一个最容易被忽略的坑——任务抛异常导致整个调度进程退出,再到跨平台部署与切换 APScheduler 的时机,一篇带你把"每天自动执行"的脚本真正跑稳。

写 Python 脚本的人,迟早会遇到一个需求:这段代码别只跑一次,每天早上 8 点自动执行一遍。比如定时抓取数据、定时发通知、定时清理临时目录。这篇文章记录一个最小可用方案,从安装到部署,一次跑通。

一、安装 schedule 库

pip install schedule

它是纯 Python 实现,没有额外依赖,Windows 和 Linux 都能直接用,特别适合个人脚本和轻量自动化场景。

二、最小可运行示例

import schedule
import time

def job():
    print("任务执行:", time.strftime("%Y-%m-%d %H:%M:%S"))

# 每天早上 8 点执行
schedule.every().day.at("08:00").do(job)
# 每 10 分钟执行一次
schedule.every(10).minutes.do(job)
# 每周一执行
schedule.every().monday.do(job)

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

run_pending() 会检查有没有到期的任务,有就执行。外层的 while 让进程一直活着,每秒检查一次。这个模型简单粗暴,但对"每天跑几件事"来说足够了。

三、一个容易踩的坑:任务抛异常,进程就停了

schedule 默认不捕获任务里的异常。一旦 job() 抛错,整个 while 循环直接崩掉,定时任务从此静默失效,而且很可能没人发现。所以正式使用时,一定要在任务内部做好异常处理:

def job():
    try:
        run_my_task()  # 真正的业务逻辑
    except Exception as e:
        with open("job_error.log", "a", encoding="utf-8") as f:
            f.write(f"{time.strftime('%F %T')} {e}\n")

再配一个 logging 把每次执行记录落盘,出问题时至少能看到最后一次运行的时间和原因。

四、电脑关机,任务就不会跑

schedule 的调度依赖活着的进程:机器休眠、进程被杀,任务都停。所以真正的部署一般有两种思路:一是把常驻进程交给系统托管,Linux 上用 systemd 或 supervisor,进程崩了会自动拉起,Windows 上可以用计划任务设置开机启动;二是对执行时刻不敏感的场景,干脆不用常驻进程,直接让 crontab 或 Windows 任务计划程序到点调起脚本,跑完退出,反而更省心。

五、什么时候该换 APScheduler

如果后面出现"任务越来越多、有的要精确到秒、有的错过了还想补跑、有的要持久化到数据库",就可以升级到 APScheduler。它的 cron 触发器支持错过任务补偿和数据库任务存储,代价是配置明显复杂。个人建议:单纯每天定时跑几件事,schedule 就够了,别一上来就上重型框架。

写在最后

定时任务的核心其实不在代码量,而在三件事:异常不外泄、日志可追溯、进程有人管。把这三个问题处理好,一个十几行的脚本也能稳定运行很久。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。