2011-09-15 9 views
29

Devo ancora trovare una chiara spiegazione delle differenze tra Condition e Event classi nel modulo threading. C'è un chiaro caso d'uso in cui uno sarebbe più utile dell'altro? Tutti gli esempi che riesco a trovare usano un modello produttore-consumatore come esempio, dove queue.Queue sarebbe la soluzione più semplice.threading.Condition vs threading.Event

risposta

35

In poche parole, si utilizza una condizione quando i thread sono interessati ad attendere che qualcosa diventi vero, e, una volta che è vero, per avere accesso esclusivo ad alcune risorse condivise.

Mentre si utilizza un evento quando i thread sono solo interessati ad aspettare che qualcosa diventi realtà.

In sostanza, Condizione è un evento + blocco astratto, ma diventa più interessante se si considera che è possibile avere più condizioni diverse sullo stesso blocco sottostante. Quindi potresti avere condizioni diverse che descrivono lo stato della risorsa sottostante, il che significa che puoi svegliare i lavoratori che sono interessati solo a particolari stati della risorsa condivisa.

+0

Quindi una condizione è un evento estratto + blocco? –

+2

In sostanza si ... ma diventa più interessante se si considera che è possibile avere più condizioni diverse sullo stesso blocco sottostante. Quindi potresti avere condizioni diverse che descrivono lo stato della risorsa sottostante, il che significa che puoi svegliare i lavoratori che sono interessati solo a particolari stati della risorsa condivisa. – donkopotamus

+0

'threading.Condition(). Wait()' un'attesa bloccata? – overexchange