我的局域网上有一台仪器每隔5-10毫秒发送一个UDP数据包.在我的应用程序中,我有一个读取器线程,它在启动时分配一个带有大缓冲区的套接字,然后进入一个无限循环来读取累积的数据包,解析它们,将它们写入假脱机程序,然后休眠半秒钟(time.sleep(0.500)
).
我有几个懒惰的数据消费者,其中大多数都存档或生成被动统计数据.但是一个消费者(用于显示)需要最新数据,并且需要在查询假脱机程序之前唤醒睡眠读取器(读取套接字).
唤醒睡眠线程的最佳方法是什么?
(或者,或者,有一种更好的方式让线程更容易被唤醒吗?)
我没注意到threading.condition.wait()有一个可选的超时参数!
答案是创建一个条件对象并使用其wait()方法和可选的timeout而不是time.sleep().如果需要在超时之前唤醒线程,请调用条件对象的notify()方法.