2014-04-03 10 views
6

C'è uno strumento sulla mia LAN che invia un pacchetto di dati UDP ogni 5-10 ms. Nella mia applicazione, ho un thread del lettore che alloca un socket con un buffer grande quando viene avviato, quindi entra in un ciclo infinito per leggere i pacchetti accumulati, analizzarli, scriverli in uno spooler, quindi dormire per mezzo secondo (time.sleep(0.500)) .Il modo migliore per riattivare un thread Python dormiente?

Ho diversi utenti pigri per i dati, molti dei quali archiviano o generano statistiche passive. Ma un consumatore (per display) ha bisogno di dati aggiornati e deve riattivare il lettore dormiente (per leggere il socket) prima di interrogare lo spooler.

Qual è il modo migliore per riattivare un filo dormiente?

(O, in alternativa, c'è un modo migliore per un filo a dormire che è più facile a svegliarsi?)

+0

Perché hai bisogno di dormire? –

+0

Perché è più efficiente farlo. – BobC

risposta

8

non ero riuscito a notare che threading.condition.wait() ha un argomento timeout facoltativo!

La risposta è create a condition object e utilizzare il suo metodo wait() con il timeout opzionale anziché time.sleep(). Se il thread deve essere riattivato prima del timeout, chiamare il metodo notify() dell'oggetto condizione.