12.05.2013 Views

Python para todos

Python para todos

Python para todos

SHOW MORE
SHOW LESS

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 />

102

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

Saved successfully!

Ooh no, something went wrong!