python 好用的定时包schedule

部署运行你感兴趣的模型镜像
import schedule,time,typer
from datetime import datetime
from new_schedule.spider.fsonlines.index import MiniprogressSpider
run_app=typer.Typer()

def run_task():
    # try:
    MiniprogressSpider(datetime.today()).start()
    # except Exception as e:
    #     print('定时任务异步失败:', str(e))

# 定义每日调度任务
def daily_schedule():
    print('定时任务配置开始')
    schedule.every().day.at("11:20").do(run_task)
    schedule.every().day.at("10:50").do(run_task)

# 启动调度器
def start_scheduler():
    print('调度任务开始')
    while True:
        schedule.run_pending()
        time.sleep(1)

@run_app.command()
def start():
    # 启动每日调度任务
    daily_schedule()
    # 启动调度器
    start_scheduler()

if __name__ == '__main__':
    start()

网上很多schedule 调用windows 上的程序都不能正常运行。目前这个还是非常稳的

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>嗯,用户想了解如何在Python中使用schedule库设置定时任务,并要示例用法。这问题其实挺明确的,用户应该是刚接触定时任务实现的新手。用户之前提供了四个参考引用,内容都很实用。引用[1]展示了基础的时间点调度,引用[2]说明间隔执行任务,引用[3]展示按星期设置,引用[4]则是个高级用例——清理过期任务。要覆盖用户需求,得把这些典型场景都囊括进去。用户特别强调“尽可能参考引用内容”,说明ta需要实用性强、能直接复用的案例。考虑到用户可能遇到的实际问题,应该加入:1.基础安装步骤(因为有人总忘记pipinstall)2.时间格式的多样写法(用户没提但新手常卡在这里)3.取消任务的说明(引用没提但关键功能)4.错误处理(代码不报错对新人很重要)上次回答生成的问题质量很好,这次继续延续:任务并发、参数传递这些进阶问题用户可能暂时不需要,但提前问出来能帮ta拓展思路。最后那个资源占用问题特别实用——毕竟没人想写个定时任务把电脑卡死。用户情绪应该是比较急切的学习状态,回复要快且直给。把示例拆成原子操作很必要,ta可以像拼积木一样组合使用。引用[3]里那个周设置写得不规范,得按PEP8重写;引用[4]的datetime比较逻辑要加时区说明(有人复制代码后发现时间对不上)。要不要提APScheduler呢?用户当前需求schedule足够用了,但最后补充一句替代方案能体现专业性。对了,定时任务持久化这个点可能超纲,放在问题里让用户决定是否深入更好。</think> 以下是在Python中使用`schedule`库设置定时任务的详细说明及实用示例,参考并拓展了站内引用内容: --- ### **1. 基础用法** #### 1.1 安装库 ```bash pip install schedule ``` #### 1.2 按固定间隔执行 ```python import schedule import time def task(): print("任务执行中...") # 每10分钟执行一次 schedule.every(10).minutes.do(task) # 每隔1小时执行 schedule.every().hour.do(task) # 每天上午10:30执行 schedule.every().day.at("10:30").do(task) while True: schedule.run_pending() # 检查待执行任务 time.sleep(1) # 避免CPU满载 ``` > **关键点**:`run_pending()`需在循环中调用以触发任务检测,`time.sleep(1)`减少资源消耗[^2]。 --- ### **2. 高级场景示例** #### 2.1 按星期定时 ```python # 每周一12:40执行 schedule.every().monday.at("12:40").do(task) # 每周二和周四18:00执行 schedule.every().tuesday.at("18:00").do(task) schedule.every().thursday.at("18:00").do(task) ``` > **注意**:星期参数为英文小写(`monday`, `tuesday`等)[^3]。 #### 2.2 多任务并行 ```python def task1(): print("任务1启动") def task2(): print("任务2启动") # 每5秒执行task1,每分钟执行task2 schedule.every(5).seconds.do(task1) schedule.every().minute.do(task2) while True: schedule.run_pending() time.sleep(0.5) # 更频繁检测任务 ``` #### 2.3 带参数的任务 ```python def greet(name): print(f"你好, {name}!") # 每天8:00调用带参数的任务 schedule.every().day.at("08:00").do(greet, name="小明") ``` > **技巧**:`.do()`支持位置参数(`args`)和关键字参数(`kwargs`)传递[^1]。 --- ### **3. 实践技巧** #### 3.1 任务管理 ```python # 取消所有任务 schedule.clear() # 取消单个任务 job = schedule.every().day.at("09:00").do(task) schedule.cancel_job(job) ``` #### 3.2 自动清理过期任务(拓展引用[^4]) ```python import datetime def cleanup(max_age_hours=24): now = datetime.datetime.now() for job in schedule.get_jobs(): if (now - job.last_run) > datetime.timedelta(hours=max_age_hours): schedule.cancel_job(job) print(f"已清理过期任务: {job}") # 每6小时清理一次 schedule.every(6).hours.do(cleanup) ``` --- ### **4. 常见问题解决** - **时区问题**: `schedule`默认使用系统时区,需确保系统时间正确。若需指定时区,可在任务函数中转换: ```python import pytz def timezoned_task(): tz = pytz.timezone('Asia/Shanghai') now = datetime.datetime.now(tz) print(f"北京时间: {now}") ``` - **任务阻塞**: 长时间运行的任务会阻塞后续任务,解决方案: ```python import threading def long_job(): threading.Thread(target=complex_operation).start() # 在新线程中执行 ``` --- ### **替代方案建议** 对高精度或分布式定时需求,可考虑: - **APScheduler**:支持持久化存储和并发控制 - **Celery Beat**:适合分布式系统 - **操作系统级工具**:如Linux的`cron`(`crontab -e`) ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值