如何在Python中设置精度达小数秒级的警报信号?
Python 3 实现高精度定时警报(支持非整数秒)
要实现精度高于整数秒的定时警报(比如0.4秒、3.2秒),可以使用标准库的signal.setitimer()方法,它替代了过时的ualarm(),支持微秒级精度的实时定时。
核心方案:signal.setitimer()
signal.setitimer()可以设置实时定时器(ITIMER_REAL),参数支持浮点数(代表秒数),到期时会发送SIGALRM信号,和signal.alarm()的信号类型一致,但精度更高。
代码示例
import signal import time # 定义警报触发后的处理函数 def high_precision_alarm_handler(signum, frame): print("警报触发!当前时间戳:", time.time()) # 注册SIGALRM信号的处理函数 signal.signal(signal.SIGALRM, high_precision_alarm_handler) # 设置单次0.4秒的警报(第二个参数为0表示仅触发一次) signal.setitimer(signal.ITIMER_REAL, 0.4, 0) # 阻塞等待警报触发(实际场景可替换为业务逻辑) print("等待0.4秒警报...") time.sleep(1) # 若需取消未触发的定时器,可调用: # signal.setitimer(signal.ITIMER_REAL, 0)
关键说明
ITIMER_REAL:基于系统实时时间,到期发送SIGALRM,精度可达微秒级(取决于系统调度)- 参数格式:
setitimer(定时器类型, 首次触发时间(秒), 重复触发间隔(秒)),若仅需单次触发(类似signal.alarm()),将重复间隔设为0即可 - 浮点数支持:直接传入0.4、3.2这类非整数秒数,底层会自动转换为微秒计算
重复定时场景(可选)
如果需要重复触发警报(比如每3.2秒执行一次),只需调整第三个参数:
# 首次3.2秒后触发,之后每3.2秒重复触发 signal.setitimer(signal.ITIMER_REAL, 3.2, 3.2)
内容的提问来源于stack exchange,提问作者Terry Ligocki
相关产品推荐
相关产品推荐

