2014-04-03 16 views
6

Es gibt ein Instrument in meinem LAN, das alle 5-10 ms ein UDP-Datenpaket sendet. In meiner Anwendung habe ich einen Reader-Thread, der beim Start einen Socket mit einem großen Puffer zuweist, dann in eine Endlosschleife geht, um die angesammelten Pakete zu lesen, sie zu analysieren, sie in einen Spooler zu schreiben und dann für eine halbe Sekunde zu schlafen (time.sleep(0.500)) .Wie weckt man am besten einen schlafenden Python-Thread?

Ich habe mehrere träge Verbraucher für die Daten, von denen die meisten Archivierung oder passive Statistiken generieren. Aber ein Verbraucher (zur Anzeige) benötigt aktuelle Daten und muss den schlafenden Leser wecken (um den Socket zu lesen), bevor er den Spooler abfragt.

Was ist der beste Weg, um einen schlafenden Thread aufzuwecken?

(oder alternativ gibt es einen besseren Weg für einen Thread zu schlafen, das ist einfacher zu wecken?)

+0

Warum brauchen Sie überhaupt zu schlafen? –

+0

Weil es effizienter ist. – BobC

Antwort

8

ich gescheitert war zu bemerken, dass threading.condition.wait() ein optionales Argument timeout!

Die Antwort ist create a condition object und verwenden Sie die wait() Methode mit dem optionalen Timeout anstelle von time.sleep(). Wenn der Thread vor dem Timeout aktiviert werden muss, rufen Sie die Methode des Bedingungsobjekts auf.

Verwandte Themen