2014-04-03 63 views
6

我的局域網上有一臺儀器每5-10 ms發送一個UDP數據包。在我的應用程序中,我有一個閱讀器線程,它在啓動時分配一個帶有大緩衝區的套接字,然後進入無限循環以讀取累積的數據包,解析它們,將它們寫入假脫機程序,然後休眠半秒鐘(time.sleep(0.500)) 。如何最好地喚醒睡眠的Python線程?

我有幾個懶惰的消費者的數據,其中大部分做歸檔或生成被動統計。但是一個消費者(用於顯示)需要最新的數據,並且在查詢假脫機程序之前需要喚醒睡眠的讀取器(以讀取套接字)。

喚醒睡眠線程的最佳方式是什麼?

(或可選擇,有一個線程更好的辦法睡覺說得容易醒?)

+0

爲什麼你需要睡覺呢? –

+0

因爲這樣做效率更高。 – BobC

回答

8

我沒有注意到,threading.condition.wait()有一個可選的超時參數!

答案是create a condition object並使用其wait()方法與可選的超時而不是time.sleep()。如果線程需要在超時之前被喚醒,請調用條件對象的notify()方法。