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

Python3.6定时任务调度问题:按起止时间执行JobA/JobB及代码报错求助

Python 3.6 通用任务调度实现及问题修复

问题根源

你遇到的"一直输出Both jobs are currently offline"问题,核心是跨天时间范围的判断逻辑错误:JobB的结束时间(08:55)早于开始时间(18:00),如果直接用当前时间 >= 开始时间 and 当前时间 <= 结束时间的逻辑,这个条件永远无法成立,导致任务匹配失败。

通用实现方案

下面的代码将任务配置与判断逻辑解耦,支持灵活修改任务时间,同时正确处理跨天场景:

from datetime import datetime
import time

# 可配置任务列表,修改/新增任务直接调整此处即可
JOBS = [
    {
        "name": "JobA",
        "start_time": "09:00:00",
        "end_time": "17:55:00",
        "task": lambda: print("Executing JobA...")
    },
    {
        "name": "JobB",
        "start_time": "18:00:00",
        "end_time": "08:55:00",
        "task": lambda: print("Executing JobB...")
    }
]

def is_time_in_range(current_time, start_str, end_str):
    """判断当前时间是否在指定范围内,自动处理跨天场景"""
    # 解析时间字符串为time对象
    start = datetime.strptime(start_str, "%H:%M:%S").time()
    end = datetime.strptime(end_str, "%H:%M:%S").time()
    current = current_time.time()

    if start <= end:
        # 非跨天场景:时间范围在同一天内
        return start <= current <= end
    else:
        # 跨天场景:时间范围覆盖当天晚些时候到次日凌晨
        return current >= start or current <= end

def run_scheduler():
    while True:
        now = datetime.now()
        task_triggered = False

        for job in JOBS:
            if is_time_in_range(now, job["start_time"], job["end_time"]):
                job["task"]()
                task_triggered = True
                break  # 同一时间仅执行第一个匹配的任务,可根据需求调整
        
        if not task_triggered:
            print("Both jobs are currently offline.")
        
        # 每隔60秒检查一次,可按需调整间隔
        time.sleep(60)

if __name__ == "__main__":
    run_scheduler()

关键特性说明

  • 灵活配置:所有任务的时间、名称、执行逻辑都集中在JOBS列表中,修改任务参数无需改动核心判断逻辑。
  • 跨天时间兼容:is_time_in_range函数自动识别跨天场景,通过current >= start or current <= end的逻辑正确匹配18:00到次日08:55的时间区间。
  • 可扩展任务逻辑:任务的执行逻辑可以替换为任意自定义函数,比如将lambda替换为复杂业务逻辑的函数名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:40:27