如何让定时器中断等待的进程?

0 投票
1 回答
859 浏览
提问于 2025-04-17 10:30

我正在尝试在一个使用标准读-评估-打印循环的程序中实现闹钟功能。

代码示例大概是这样的:

while True:
    input = get_input() # A function that waits for input and 
                        # returns the input once it is obtained
    set_alarm(interpret(input)) # A function that sets the alarm

Set_alarm使用了threading.Timer这个类。不过,这里有一个问题。定时器虽然能按时启动,但当get_input()在等待输入时,定时器会等这个过程完成后才会输出结果。

有没有办法让定时器的回调函数打断这个等待的过程,并在激活后立即输出结果呢?

谢谢!

1 个回答

0

CPython在执行每一步纯Python代码时,会检查是否有信号。很可能是get_input()这个函数在占用全局解释器锁,这样信号处理就会被延迟,直到get_input()函数执行完毕。

解决这个问题的方法是使用非阻塞的方式来获取用户输入,这样可以设置超时时间。根据你使用的平台,你可以尝试使用kbhit或者select(配合标准输入)来获取用户的输入。

撰写回答