python小型定时任务--schedule

本文介绍使用Python的schedule库进行定时任务调度的方法,包括不同时间单位的任务调度,如分钟、秒、小时等,并讨论了在执行定时任务时可能遇到的问题及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import os
import schedule
import time


def job():
    os.system("scrapy crawl saveSpider")
    print('yici ')

schedule.every().minutes.do(job)
# schedule.every().hour.do(job)


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


'''
# 每10分钟执行一次job函数
schedule.every(10).minutes.do(test)
# 每10秒执行一次job函数
schedule.every(10).seconds.do(test)
# 当every()没参数时默认是1小时/分钟/秒执行一次job函数
schedule.every().hour.do(test)
schedule.every(6).hours.do(test)
schedule.every().day.at("10:30").do(test)
schedule.every().monday.do(test)
# 具体某一天某个时刻执行一次job函数
schedule.every().wednesday.at("13:15").do(test)
# 可以同时定时执行多个任务,但是每个任务是按顺序执行
schedule.every(10).seconds.do(job2)
# 如果job函数有有参数时,这么写
schedule.every(10).seconds.do(job,"参数")
'''
弊端

1.需要定时运行的函数job不应当是死循环类型的,也就是说,这个线程应该有一个执行完毕的出口。一是因为线程万一僵死,会是非常棘手的问题;二是下一次定时任务还会开启一个新的线程,执行次数多了就会演变成灾难。
2.如果schedule的时间间隔设置得比job执行的时间短,一样会线程堆积形成灾难,也就是说,我job的执行时间是1个小时,但是我定时任务设置的是5分钟一次,那就会一直堆积线程。

<think>我们参考用户提供的引用内容以及具体要求:用户需求:在Python中设置本地定时任务执行脚本,具体通过schedule库或APScheduler实现。根据引用内容,我们得知:-schedule库是一个轻量级的定时任务库(引用3)-APScheduler则是一个更强大的企业级定时任务库(引用4和5)我们将分别介绍两种方法:一、使用schedule库二、使用APScheduler库同时,用户提到是“本地定时任务”,所以我们不需要考虑分布式环境。注意:引用2中提到使用time.sleep()也可以实现,但通常不推荐用于复杂的定时任务,因为它是阻塞的,且不够灵活。因此我们将重点放在schedule和APScheduler上。另外,引用4和5中提供了APScheduler的具体代码示例,我们可以参考并简化成用户需要的本地定时任务版本。结构:1.使用schedule库1.1安装1.2基本用法(设置时间规则,执行任务)1.3示例代码1.4注意事项(比如需要循环运行调度器)2.使用APScheduler库2.1安装2.2基本组件(触发器、作业存储器、执行器等),但因为是本地任务,我们使用默认的即可。2.3示例代码(参考引用4和5,但简化:不用MongoDB存储,而使用内存存储;不使用复杂触发器等)2.4注意事项由于用户要求使用中文,所以回答全部使用中文。最后,按照系统指令,生成相关问题。</think> ### Python设置本地定时任务执行脚本的方法 在Python中创建本地定时任务可通过`schedule`和`APScheduler`两类库实现: #### 一、使用`schedule`库(轻量级方案) 1. **安装与基础配置** ```python pip install schedule # 安装库 ``` 2. **定时任务实现** ```python import schedule import time def job(): print("执行任务...") # 替换为实际脚本逻辑 # 设置定时规则(每10分钟执行) schedule.every(10).minutes.do(job) # 设置定时规则(每天9:30执行) schedule.every().day.at("09:30").do(job) while True: schedule.run_pending() time.sleep(1) # 避免CPU空转[^3] ``` > 📌 **特点** > - 语法直观(类似英语表达) > - 适合简单周期性任务 > - 需手动维护主循环[^3] #### 二、使用`APScheduler`(企业级方案) 1. **安装与基本组件** ```python pip install apscheduler ``` 2. **后台定时任务实现** ```python from apscheduler.schedulers.background import BackgroundScheduler def script_task(): print("执行脚本任务") # 实际业务逻辑 scheduler = BackgroundScheduler() # 配置定时规则(每天12:00执行) scheduler.add_job( script_task, 'cron', hour=12, minute=0 ) scheduler.start() # 启动调度器[^4] ``` 3. **高级配置参数** | 参数 | 类型 | 说明 | |------|------|------| | `max_instances` | int | 最大并发实例数(默认1) | | `misfire_grace_time` | int | 任务延迟容忍时间(秒) | | `coalesce` | bool | 合并多次未执行的任务 | | `replace_existing` | bool | 替换同名任务(避免重复)[^4] | > ⚡ **最佳实践** > - 使用`BlockingScheduler`替代`BackgroundScheduler`可在控制台直接运行 > - 通过`CronTrigger`实现复杂计划(如:"每周一至五9:30执行")[^4] > - 重要任务建议添加异常处理与日志记录 #### 三、方案对比 | 特性 | schedule库 | APScheduler库 | |------|-----------|---------------| | 学习曲线 | ⭐(简单) | ⭐⭐⭐⭐(复杂) | | 任务精度 | 秒级 | 毫秒级 | | 分布式支持 | ❌ | ✅(需配置存储)[^5] | | 异常恢复 | 需手动实现 | 内置重试机制 | | 适用场景 | 小型脚本 | 生产环境任务[^4] | > 💡 **建议** > 简单本地任务用`schedule`快速实现,复杂需求推荐`APScheduler`(支持中断恢复、并发控制等企业级特性)[^1][^4]。对于需要持久化存储的场景,可配置MongoDB作业存储(参考引用5)。 --- ### 相关问题 1. 如何在Python定时任务中处理执行异常? 2. `schedule`和`APScheduler`在资源消耗上有何差异? 3. 如何实现分布式环境下的定时任务协同? 4. 定时任务脚本如何安全地存储和加载凭证? 5. `CronTrigger`和`IntervalTrigger`分别适用于哪些场景?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值