2011-09-15 7 views
29

todavía tengo que encontrar una explicación clara de las diferencias entre Condition y Event clases en el módulo threading. ¿Hay un caso de uso claro donde uno sería más útil que el otro? Todos los ejemplos que puedo encontrar utilizan un modelo productor-consumidor como ejemplo, donde queue.Queue sería la solución más directa.threading.Condition vs threading.Event

Respuesta

35

En pocas palabras, utiliza una condición cuando los hilos están interesados ​​en esperar que algo se haga realidad, y una vez que sea cierto, para tener acceso exclusivo a algún recurso compartido.

Mientras que utiliza un evento cuando los hilos están interesados ​​sólo en la espera de que algo sea cierto.

En esencia, es una condición abstracta Evento + Lock, pero se vuelve más interesante si tenemos en cuenta que puede tener varias condiciones diferentes en el mismo cerrojo subyacente. Por lo tanto, podría tener diferentes Condiciones que describan el estado del recurso subyacente, lo que significa que puede despertar a los trabajadores que solo están interesados ​​en estados particulares del recurso compartido.

+0

Así que una condición es una abstraída Evento + Lock? –

+2

En esencia, sí ... pero se vuelve más interesante cuando se considera que puede tener varias Condiciones diferentes sobre el mismo bloqueo subyacente. Por lo tanto, podría tener diferentes Condiciones que describan el estado del recurso subyacente, lo que significa que puede despertar a los trabajadores que solo están interesados ​​en estados particulares del recurso compartido. – donkopotamus

+0

Está 'threading.Condition(). Wait()' ¿espera bloqueada? – overexchange

Cuestiones relacionadas