如何让定时器中断等待的进程?
我正在尝试在一个使用标准读-评估-打印循环的程序中实现闹钟功能。
代码示例大概是这样的:
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(配合标准输入)来获取用户的输入。