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

如何在Python中实现每分钟第n秒精准执行指定函数?

直接使用time.sleep(60)实现定时执行的核心问题是等待时长完全固定,无系统时钟对齐能力:一旦任务本身存在执行耗时、系统调度导致sleep延迟、系统时钟发生跳变,执行时间点会持续累计偏移,完全无法对齐每分钟固定秒数的节点。

实现思路
  • 放弃固定时长sleep的逻辑,每次执行任务前动态计算当前时间到下一个目标时间点的真实间隔
  • 目标时间点统一对齐系统时钟:固定取每分钟的指定秒数(如第50秒),若当前时间已过本分钟的目标秒,则自动取下一分钟的对应时间点,自动处理跨分钟、跨小时、跨天等时间进位
  • 等待逻辑做分层处理:长等待阶段用普通sleep降低CPU占用,距离目标时间剩几十毫秒时切换为高精度短间隔等待,抵消系统sleep调度的误差,保证时间对齐精度
  • 时间计算完全独立于任务执行耗时,无论任务运行多久,下次执行点永远对齐时钟节点,不会产生累计漂移
可直接复用的代码实现
import time
from datetime import datetime, timedelta

# 配置项:每分钟的第N秒执行目标函数,示例为第50秒
TARGET_SECOND = 50

def target_func():
    """待执行的业务逻辑,可替换为自己的代码"""
    current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
    print(f"[{current_time}] 目标函数触发执行")
    # 模拟业务逻辑耗时,即使耗时超过1秒也不会造成定时偏移
    time.sleep(1.5)

def run_aligned_scheduler():
    while True:
        now = datetime.now()
        # 对齐到整秒,去掉微秒部分做计算
        current_second_floor = now.replace(microsecond=0)
        # 计算下一个执行点
        if now.second < TARGET_SECOND:
            next_run_time = current_second_floor.replace(second=TARGET_SECOND)
        else:
            # 加1分钟后设置目标秒,自动处理跨小时、跨天、跨月等所有进位场景
            next_run_time = (current_second_floor + timedelta(minutes=1)).replace(second=TARGET_SECOND)
        # 计算总等待时长
        wait_total = (next_run_time - now).total_seconds()
        # 长等待阶段预留50毫秒余量,避免系统sleep调度延迟错过时间点
        if wait_total > 0.1:
            time.sleep(wait_total - 0.05)
        # 短间隔高精度等待,精准卡到目标时间点,误差控制在10毫秒内
        while datetime.now() < next_run_time:
            time.sleep(0.001)
        # 到点执行目标函数
        target_func()

if __name__ == "__main__":
    run_aligned_scheduler()
方案特性
  • 无累计漂移:每次循环都基于当前系统时间重新计算执行点,不会因为任务耗时、sleep误差出现时间点越跑越偏的问题,可长期稳定运行
  • 边界场景自动处理:时间计算借助timedelta自动处理跨天、跨月、闰年、夏令时切换等特殊场景,不需要额外编写判断逻辑
  • 精度可控:常规操作系统下执行时间点的误差可以稳定控制在10毫秒以内,满足绝大多数业务定时需求;如果需要更高精度,可以把最后阶段的短sleep间隔调小到0.0001秒即可
  • 无任务堆积风险:如果某次任务执行时间超过60秒,程序会自动跳过已经错过的执行周期,直接等待下一个合法时间点,不会出现任务连续触发的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:15:12