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