You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Threads<br />
con acquire. Este método libera el candado y bloquea al thread hasta<br />
que una llamada a notify o notifyAll en otro thread le indican que se<br />
ha cumplido la condición por la que esperaba. El thread que informa a<br />
los demás de que se ha producido la condición, también debe llamar a<br />
acquire antes de llamar a notify o notifyAll.<br />
Al llamar a notify, se informa del evento a un solo thread, y por tanto<br />
se despierta un solo thread. Al llamar a notifyAll se despiertan <strong>todos</strong><br />
los threads que esperaban a la condición.<br />
Tanto el thread que notifica como los que son notificados tienen que<br />
terminar liberando el lock con release.<br />
lista = []<br />
cond = threading.Condition()<br />
def consumir():<br />
cond.acquire()<br />
cond.wait()<br />
obj = lista.pop()<br />
cond.release()<br />
return obj<br />
def producir(obj):<br />
cond.acquire()<br />
lista.append(obj)<br />
cond.notify()<br />
cond.release()<br />
Los eventos, implementados mediante al clase Event, son un wrapper<br />
por encima de Condition y sirven principalmente <strong>para</strong> coordinar<br />
threads mediante señales que indican que se ha producido un evento.<br />
Los eventos nos abstraen del hecho de que estemos utilizando un Lock<br />
por debajo, por lo que carecen de mé<strong>todos</strong> acquire y release.<br />
El thread que debe esperar el evento llama al método wait y se bloquea,<br />
opcionalmente pasando como parámetro un número en coma<br />
flotante indicando el número máximo de segundos a esperar. Otro<br />
hilo, cuando ocurre el evento, manda la señal a los threads bloqueados<br />
a la espera de dicho evento utilizando el método set. Los threads que<br />
estaban esperando se desbloquean una vez recibida la señal. El flag que<br />
determina si se ha producido el evento se puede volver a establecer a<br />
falso usando clear.<br />
109