You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Schedule库在指定时段准点每分钟执行任务?

Python Schedule库实现指定时段内准点每分钟执行任务

要实现仅在指定时段内执行准点任务,核心思路是在任务触发时先检查当前时间是否在目标时段内,符合条件才执行实际业务逻辑。Schedule库本身没有直接的时段过滤API,我们可以通过包装任务函数来实现需求,具体有两种实用方式:

方式一:直接在任务函数内添加时间判断

这种方式简单直接,适合单次使用的场景:

import schedule
import datetime
import time

# 定义实际要执行的任务
def actual_job():
    print(f"[{datetime.datetime.now()}] 执行任务")

# 定义带时段检查的调度任务
def scheduled_job():
    current_time = datetime.datetime.now().time()
    # 设置允许执行的时段:10:00 至 11:00
    start_time = datetime.time(10, 0)
    end_time = datetime.time(11, 0)
    
    # 仅在时段内执行实际任务
    if start_time <= current_time <= end_time:
        actual_job()

# 保持原有的准点每分钟触发逻辑
schedule.every(1).minutes.at(":00").do(scheduled_job)

# 启动调度循环
while True:
    schedule.run_pending()
    time.sleep(1)

方式二:用装饰器封装时段检查逻辑

如果需要给多个任务添加时段限制,装饰器的方式更优雅、复用性更强:

import schedule
import datetime
import time

# 定义时段检查装饰器
def run_only_between(start_hour, start_minute, end_hour, end_minute):
    def decorator(func):
        def wrapper():
            current_time = datetime.datetime.now().time()
            start = datetime.time(start_hour, start_minute)
            end = datetime.time(end_hour, end_minute)
            if start <= current_time <= end:
                return func()
        return wrapper
    return decorator

# 用装饰器标记允许执行的时段
@run_only_between(10, 0, 11, 0)
def actual_job():
    print(f"[{datetime.datetime.now()}] 执行任务")

# 原准点触发逻辑不变
schedule.every(1).minutes.at(":00").do(actual_job)

# 启动调度循环
while True:
    schedule.run_pending()
    time.sleep(1)

说明

  • 两种方式都保留了你原有的准点每分钟触发逻辑(程序启动后等待到下一分钟00秒执行),只是在触发时增加了时段校验。
  • 时段判断基于系统当前本地时间,如果需要使用UTC时间,可将datetime.datetime.now()替换为datetime.datetime.utcnow()。

内容的提问来源于stack exchange,提问作者mv1999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:50:26