Python 每小时每隔几分钟执行任务:schedule 循环调度示例
Python 用 schedule 库实现每小时、每 5 分钟、每隔 N 秒执行一次任务,覆盖间隔调度常见写法,给出完整代码和与 crontab 对比的注意事项。
场景痛点
需要每 5 分钟抓一次接口数据、每小时同步一次订单、每隔 30 秒检测一次剪贴板变化,这种"短间隔循环"任务靠手动不现实,又不想为了几个任务去配系统 crontab。Python 的 schedule 库几行代码就能搞定,跨 Windows、Mac、Linux 都能跑。
用到的库
pip install schedule
完整代码
import schedule
import time
from datetime import datetime
def tick(label):
"""通用打点函数,打印当前时间和标签"""
now = datetime.now().strftime("%H:%M:%S")
print(f"[{now}] 任务执行: {label}")
def main():
# 每 30 秒执行一次
schedule.every(30).seconds.do(tick, label="30 秒心跳")
# 每 5 分钟执行一次
schedule.every(5).minutes.do(tick, label="5 分钟数据采集")
# 每 1 小时执行一次
schedule.every().hours.do(tick, label="1 小时订单同步")
# 每 1 天的 2 小时后执行一次(即每 2 小时)
schedule.every(2).hours.do(tick, label="2 小时报表汇总")
# 每 10 秒先执行一次,再每隔 10 秒
schedule.every(10).seconds.do(tick, label="10 秒巡检")
print("循环任务已启动,按 Ctrl+C 退出...")
while True:
schedule.run_pending()
time.sleep(1)
if __name__ == "__main__":
main()
代码讲解
schedule.every(30).seconds.do(...):每 30 秒触发一次,是最短粒度的常用写法。schedule.every(5).minutes.do(...):每 5 分钟触发一次,数字换成 1、10、15 都可以。schedule.every().hours.do(...)等价于每小时整点;schedule.every(2).hours.do(...)表示每 2 小时。.do(tick, label="...")里第二个参数开始会作为参数传给任务函数,相当于 functools.partial。- 主循环
time.sleep(1)决定了 schedule 的轮询精度,对秒级任务来说 1 秒误差完全可接受。
运行结果
启动后控制台每隔对应间隔就打印一行带时间戳的日志,比如:
[09:00:01] 任务执行: 30 秒心跳
[09:00:05] 任务执行: 5 分钟数据采集
[09:00:10] 任务执行: 10 秒巡检
保持窗口运行即可,关闭窗口任务停止。
注意事项
- 任务如果比间隔还长,schedule 不会自动跳过;比如每 5 分钟跑一次,但单次跑了 8 分钟,下一轮会立刻接上,可能堆积。
- 高频任务(秒级)建议加防抖:任务开头判断上次结束时间,没跑完就直接 return。
- 多个短间隔任务共用一个进程时,注意线程安全:共享变量要加锁。
- 想真正后台跑,Windows 用 pythonw 或 NSSM 注册成服务,Linux 用 systemd 或 nohup。

更新时间:2026-09-14 20:39:38
上一篇:Python 生成二维码图片:qrcode 库入门与自定义样式