28.06.2017 Views

Python para todos

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Python</strong> <strong>para</strong> <strong>todos</strong><br />

Para comprobar si un thread sigue ejecutándose, se puede utilizar el<br />

método isAlive. También podemos asignar un nombre al hilo y consultar<br />

su nombre con los mé<strong>todos</strong> setName y getName, respectivamente.<br />

Mediante la función threading.enumerate obtendremos una lista de<br />

los objetos Thread que se están ejecutando, incluyendo el hilo principal<br />

(podemos com<strong>para</strong>r el objeto Thread con la variable main_thread <strong>para</strong><br />

comprobar si se trata del hilo principal) y con threading.activeCount<br />

podemos consultar el número de threads ejecutándose.<br />

Los objetos Thread también cuentan con un método setDaemon que<br />

toma un valor booleano indicando si se trata de un demonio. La utilidad<br />

de esto es que si solo quedan threads de tipo demonio ejecutándose,<br />

la aplicación terminará automáticamente, terminando estos threads<br />

de forma segura.<br />

Por último tenemos en el módulo threading una clase Timer que hereda<br />

de Thread y cuya utilidad es la de ejecutar el código de su método<br />

run después de un periodo de tiempo indicado como parámetro en<br />

su constructor. También incluye un método cancel mediante el que<br />

cancelar la ejecución antes de que termine el periodo de espera.<br />

Sincronización<br />

Uno de los mayores problemas a los que tenemos que enfrentarnos al<br />

utilizar threads es la necesidad de sincronizar el acceso a ciertos recursos<br />

por parte de los threads. Entre los mecanismos de sincronización<br />

que tenemos disponibles en el módulo threading se encuentran los<br />

locks, locks reentrantes, semáforos, condiciones y eventos.<br />

Los locks, también llamados mutex (de mutual exclusion), cierres<br />

de exclusión mutua, cierres o candados, son objetos con dos estados<br />

posibles: adquirido o libre. Cuando un thread adquiere el candado, los<br />

demás threads que lleguen a ese punto posteriormente y pidan adquirirlo<br />

se bloquearán hasta que el thread que lo ha adquirido libere el<br />

candado, momento en el cuál podrá entrar otro thread.<br />

El candado se representa mediante la clase Lock. Para adquirir el<br />

106

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!