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

如何在指定时间(如上午10点、11点)执行函数或触发按钮点击

精准定点执行函数实现方案

你现有的两段代码分别是固定延时、时间段判断逻辑,都无法满足精准触发固定时间点的需求,可参考以下实现:

实现逻辑

  • 先预定义所有需要触发的时间点,转换为datetime对象方便计算时间差
  • 每次计算距离当前时间最近的下一个触发时间
  • 如果距离触发时间大于0,就等待对应时长,到期后直接执行目标函数
  • 支持跨天场景,若当天所有触发时间都已过,自动计算到次日第一个触发点的等待时间

完整代码示例

import datetime
import time

def run_at_fixed_time(target_times: list, func, *args, **kwargs):
    """
    精准在指定时间点执行函数
    :param target_times: 触发时间列表,格式为["%H:%M:%S"],比如["10:00:00", "11:00:00"]
    :param func: 要执行的目标函数
    :param args: 目标函数的位置参数
    :param kwargs: 目标函数的关键字参数
    """
    time_format = "%H:%M:%S"
    # 转换所有触发时间为time对象
    target_time_objs = [datetime.datetime.strptime(t, time_format).time() for t in target_times]
    # 按时间先后排序
    target_time_objs.sort()

    while True:
        now = datetime.datetime.now()
        now_time = now.time()
        next_run = None

        # 找今天内还没到的最近触发时间
        for t in target_time_objs:
            if t >= now_time:
                next_run = datetime.datetime.combine(now.date(), t)
                break
        
        # 今天的都过了,取明天第一个触发时间
        if not next_run:
            next_run = datetime.datetime.combine(now.date() + datetime.timedelta(days=1), target_time_objs[0])
        
        # 计算需要等待的秒数
        wait_seconds = (next_run - now).total_seconds()

        if wait_seconds > 0:
            # 未到时间就等待
            time.sleep(wait_seconds)
        
        # 到时间直接执行函数
        func(*args, **kwargs)

# 测试用例:定义你要执行的函数
def your_function():
    print(f"函数在 {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')} 执行")

# 调用入口,指定10点、11点执行
if __name__ == "__main__":
    run_at_fixed_time(["10:00:00", "11:00:00"], your_function)

精度调整说明

正常情况下上述代码误差在10ms以内,完全满足普通业务场景的精度需求。如果需要更高精度,可以把sleep逻辑替换为小步长轮询,避免系统调度带来的误差:

# 高精度等待逻辑,替换原time.sleep(wait_seconds)即可
while (datetime.datetime.now() < next_run):
    time.sleep(0.001)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:39:03