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

求助:如何实现Python后台闹钟功能?time.sleep/Timer方案遇阻

问题解决:实现后台闹钟持续打印睡眠内容

原方案问题分析

方案一的问题

  • sleeping循环内每次调用alarm(),而alarm又递归调用sleeping(),直接导致程序逻辑混乱,陷入无限嵌套
  • alarm里的sleep(5)是阻塞执行的,会打断当前的睡眠打印流程,根本做不到后台触发

方案二的问题

  • 创建Timer时错误传递了alarm(),这会立即执行alarm函数,而非将函数作为参数交给Timer等待定时触发
  • alarm内再次调用sleeping(),会导致重复启动打印流程,出现重复输出

修正后的代码实现

核心逻辑:用threading.Timer实现后台定时触发,主线程持续运行睡眠打印流程,闹钟仅负责一次性提示。

from time import sleep
from threading import Timer

def Type(dialog):
    '''添加打字机效果'''
    speed = 0.04  # 打字速度
    for char in dialog:
        sleep(speed)
        print(char, end='', flush=True)
    print('')  # 换行分隔内容

def alarm():
    '''闹钟触发函数'''
    Type("Hey wake up! It's 7!")

def sleeping():
    for num in range(1, 61):
        Type(f'Sleeping {num} . . .')

# 启动5秒后触发的闹钟,注意传递函数引用而非执行结果
t = Timer(5.0, alarm)
t.start()

# 主线程持续打印睡眠内容
sleeping()

关键说明

  • Timer的第二个参数必须是alarm(函数对象),不能加括号,否则会直接执行函数而非定时触发
  • 闹钟仅执行一次提示,主线程的sleeping会持续运行完成所有打印,完全符合需求
  • 如果需要重复触发闹钟,可在alarm函数末尾再次启动Timer(本需求无需此操作)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:07:54