- 任务计划程序:最传统、最官方、功能最强大的方法。
- Python 第三方库
schedule:如果你想在 Python 脚本内部实现定时逻辑,而不依赖外部系统。 - Python 第三方库
apscheduler:功能更强大、更专业的定时任务库,适合复杂的调度需求。
使用 Windows 任务计划程序(推荐)
这是 Windows 系统自带的功能,最稳定,也最灵活,它可以在指定时间、系统启动、用户登录等多种事件下触发程序。

优点:
- 系统级原生支持:不依赖 Python 环境,只要系统能运行脚本即可。
- 功能强大:支持复杂的触发器(每天、每周、每月、事件触发等)、条件判断(系统空闲、电源状态等)和操作设置。
- 可靠性高:由系统核心管理,不易被误关闭或干扰。
- 可视化界面:图形操作,简单直观。
缺点:
- 需要在系统层面进行配置,而不是在代码中。
详细步骤:
第1步:编写你的 Python 脚本
确保你的 Python 脚本是可独立运行的,一个简单的示例脚本 my_task.py:
# my_task.py
import datetime
import os
# 获取当前时间,用于记录日志
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"任务在 {now} 开始执行!")
# --- 在这里编写你的主要任务代码 ---
# 读取一个文件,写入数据,调用API等
try:
# 假设我们想在 D 盘根目录创建一个日志文件
log_file_path = "D:\\my_log.txt"
with open(log_file_path, "a", encoding="utf-8") as f:
f.write(f"任务成功执行于: {now}\n")
print("任务执行完毕,日志已写入。")
except Exception as e:
print(f"任务执行出错: {e}")
第2步:打开任务计划程序
- 按
Win + S键,搜索“任务计划程序”,然后打开它。
第3步:创建基本任务

-
在右侧的“操作”面板中,点击“创建基本任务...”。
-
创建任务向导会弹出。
- 名称:给你的任务起一个有意义的名字,
MyPythonScriptTask。 - 描述:可以简单描述一下这个任务是做什么的。
- 点击“下一步”。
- 名称:给你的任务起一个有意义的名字,
第4步:设置触发器
- 选择任务开始执行的时间点,我们选择“每天”作为示例。
- 点击“下一步”。
- 设置具体的时间,开始时间”设为
22:00,并勾选“每天”。 - 点击“下一步”。
第5步:设置操作

- 选择要执行的操作,我们选择“启动程序”。
- 点击“下一步”。
- 重要:配置要启动的程序
- 程序或脚本:这里需要填写
python.exe的完整路径。- 如何找到
python.exe的路径?在命令提示符中输入where python,它会显示 Python 的安装路径。C:\Users\YourUser\AppData\Local\Programs\Python\Python311\python.exe。 - 或者,你可以直接使用
py.exe,这是 Python 官方推荐的启动器,通常在环境变量中,这样更通用,不会因为 Python 版本不同而修改任务。
- 如何找到
- 添加参数(可选):这里填写你的 Python 脚本的路径。
D:\path\to\your\script\my_task.py。 - 起始于(可选):这里填写你的 Python 脚本所在的目录。
D:\path\to\your\script。强烈建议填写,这可以避免脚本中因相对路径找不到文件而出错。 - 点击“下一步”。
- 程序或脚本:这里需要填写
第6步:完成创建
- 确认信息无误后,点击“完成”。
第7步:高级设置(可选但推荐)
- 在任务计划程序库中,找到你刚刚创建的任务
MyPythonScriptTask。 - 右键点击,选择“属性”。
- 在“常规”选项卡中:
- 勾选“不管用户是否登录都要运行”:这样即使你注销或重启电脑,任务也会在后台执行。
- 勾选“使用最高权限运行”:可以避免因权限不足导致脚本失败。
- 在“操作”选项卡中,确保你的程序和参数都正确无误。
- 在“条件”和“设置”选项卡中,你可以进行更细致的配置,例如只有在电脑使用交流电源时才运行等。
第8步:测试
- 右键点击你的任务,选择“运行”,如果一切正常,你应该能看到命令行窗口一闪而过,
D:\my_log.txt文件被成功创建和写入。
使用 Python 第三方库 schedule
这种方法将定时逻辑完全放在 Python 代码内部,适合简单的、轻量级的定时任务。
优点:
- 代码内控制:所有逻辑都在一个文件中,易于部署和移植。
- 简单易用:API 设计非常简洁。
缺点:
- 需要程序持续运行:脚本必须一直运行才能触发下一次任务,如果脚本崩溃或关闭,定时任务就停止了。
- 不依赖系统:无法实现“开机自启”或“用户注销后运行”等系统级功能。
使用步骤:
第1步:安装 schedule 库
pip install schedule
第2步:编写脚本
# schedule_task.py
import schedule
import time
import datetime
import os
def job():
"""这是你要定时执行的任务函数"""
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"任务在 {now} 开始执行!")
try:
log_file_path = "D:\\my_log_schedule.txt"
with open(log_file_path, "a", encoding="utf-8") as f:
f.write(f"任务成功执行于: {now}\n")
print("任务执行完毕,日志已写入。")
except Exception as e:
print(f"任务执行出错: {e}")
# --- 设置定时规则 ---
# 每隔10分钟执行一次
# schedule.every(10).minutes.do(job)
# 每小时执行一次
# schedule.every().hour.do(job)
# 每天上午10点30分执行
# schedule.every().day.at("10:30").do(job)
# 每周一上午执行
# schedule.every().monday.do(job)
# 每周三和周五的下午5点执行
# schedule.every().wednesday.at("17:00").do(job)
# schedule.every().friday.at("17:00").do(job)
# 为了演示,我们每5秒执行一次
schedule.every(5).seconds.do(job)
print("定时任务已启动,脚本将一直运行...")
print("按 Ctrl+C 停止。")
# --- 保持脚本运行 ---
while True:
# 检查并执行到期的任务
schedule.run_pending()
# 暂停1秒,避免CPU占用过高
time.sleep(1)
如何运行?
直接运行这个 Python 脚本,它就会进入一个无限循环,每隔5秒(根据你的设置)调用一次 job 函数。注意:关闭这个命令行窗口,任务就会停止。
使用 Python 第三方库 APScheduler
APScheduler (Advanced Python Scheduler) 是一个功能更全面的定时任务库,比 schedule 更强大、更灵活。
优点:
- 功能强大:支持基于日期、时间间隔(cron-like)、固定时间间隔等多种调度类型。
- 持久化:可以将任务状态保存到数据库,重启后可以恢复。
- 异步支持:可以很好地与
asyncio、Twisted、Tornado等异步框架集成。 - 分布式:可以构建分布式任务队列。
缺点:
- API 比
schedule复杂一些。
使用步骤:
第1步:安装 APScheduler 库
pip install apscheduler
第2步:编写脚本
# apscheduler_task.py
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
import os
def my_job():
"""这是你要定时执行的任务函数"""
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"APScheduler 任务在 {now} 开始执行!")
try:
log_file_path = "D:\\my_log_apscheduler.txt"
with open(log_file_path, "a", encoding="utf-8") as f:
f.write(f"任务成功执行于: {now}\n")
print("任务执行完毕,日志已写入。")
except Exception as e:
print(f"任务执行出错: {e}")
# 创建一个阻塞式调度器
scheduler = BlockingScheduler()
# --- 添加定时任务 ---
# 1. 每隔30秒执行一次
# scheduler.add_job(my_job, 'interval', seconds=30)
# 2. 每天 22:00 执行
# scheduler.add_job(my_job, 'cron', hour=22, minute=0)
# 3. 每周一、周三、周五的 9:30 执行
# scheduler.add_job(my_job, 'cron', day_of_week='mon,wed,fri', hour=9, minute=30)
# 4. 在 2025-12-31 23:59:59 这个特定时间点执行一次
# scheduler.add_job(my_job, 'date', run_date=datetime(2025, 12, 31, 23, 59, 59))
# 为了演示,我们每10秒执行一次
scheduler.add_job(my_job, 'interval', seconds=10)
print("APScheduler 定时任务已启动...")
print("按 Ctrl+C 停止。")
# 启动调度器,它会一直运行直到被手动停止
try:
scheduler.start()
except (KeyboardInterrupt, SystemExit):
print("调度器已停止。")
如何运行?
与方法二类似,直接运行此脚本即可。BlockingScheduler 会阻塞主线程,保持脚本运行。
总结与对比
| 特性 | Windows 任务计划程序 | Python schedule 库 |
Python APScheduler 库 |
|---|---|---|---|
| 可靠性 | 极高,系统级管理 | 一般,依赖脚本进程存活 | 高,可配置为守护进程 |
| 功能 | 最强大,支持各种系统事件 | 简单,基本定时 | 非常强大,支持 cron、异步、持久化 |
| 易用性 | 图形界面,配置稍复杂 | 最简单,几行代码 | 中等,API 比schedule复杂 |
| 独立性 | 完全独立,脚本无需修改 | 脚本必须持续运行 | 脚本必须持续运行 |
| 适用场景 | 生产环境、关键任务、需开机自启 | 快速原型、简单的个人脚本 | 复杂应用、Web服务、需要高级调度 |
| 推荐指数 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
如何选择?
- 如果你想在 Windows 系统上稳定、可靠地运行一个定时任务,特别是需要长期无人值守运行,请毫不犹豫地选择方法一:任务计划程序,这是最专业、最推荐的方式。
- 如果你只是想在开发或测试中快速实现一个简单的定时功能,或者你的应用本身就是一个持续运行的服务(如 Flask/Django 应用),那么方法二或方法三会非常方便。
APScheduler功能更全面,适合构建复杂的应用。
