1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import threading import time class TortugaThread(threading.Thread): def __init__(self, event): threading.Thread.__init__(self) self.event = event def run(self): i = 0 print("Comienza la Tortuga.") while i < 5: time.sleep(5) print("Tortuga.") i += 1 print("Termina la Tortuga.") self.event.set() class LiebreThread(threading.Thread): def __init__(self, event): threading.Thread.__init__(self) self.event = event def run(self): i = 0 print("Comienza la Liebre.") self.event.wait() while i < 5: time.sleep(2) print("Liebre.") i += 1 print("Termina la Liebre.") if __name__ == '__main__': event = threading.Event() tortuga = TortugaThread(event) liebre = LiebreThread(event) tortuga.start() liebre.start() |

En el código presentado, el método __init__()
es el constructor de la clase TortugaThread
y LiebreThread
. Este método es llamado automáticamente cuando se crea una nueva instancia de la clase mediante la sintaxis objeto = Clase(argumentos)
.
En el caso de la clase TortugaThread
y LiebreThread
, el constructor toma un argumento event
. Dentro del método, threading.Thread.__init__(self)
es llamado para inicializar la clase base Thread. Luego, el atributo self.event
se establece con el valor del argumento event
. Esto permite que los subprocesos accedan al objeto evento compartido para coordinar su ejecución.
En este código, se utiliza un objeto de la clase threading.Event()
para sincronizar los threads de la tortuga y la liebre. El objeto event
se pasa como argumento al constructor de cada clase (TortugaThread
y LiebreThread
), y se utiliza en el método run()
de la liebre para esperar a que la tortuga termine de correr antes de empezar a moverse.
En la clase TortugaThread
, se llama al método set()
del objeto event
cuando la tortuga termina de correr. En la clase LiebreThread
, se llama al método wait()
del objeto event
antes del bucle while que hace que la liebre se mueva. Esto hace que la liebre espere a que la tortuga termine de correr antes de empezar a moverse.
threading.Event
es una clase de Python que permite a los threads esperar por un evento o señal para continuar su ejecución. Un objeto Event
se puede crear mediante threading.Event()
, y tiene dos métodos principales: set()
y wait()
.
set()
permite señalar que el evento ha ocurrido, lo que hace que todos los threads que están esperando por ese evento puedan continuar su ejecución.wait()
hace que el thread espere por el evento, deteniendo su ejecución hasta que se llame al métodoset()
en algún otro thread.
En el contexto de programación de threads, Event
se utiliza comúnmente para sincronizar la ejecución de múltiples threads, asegurando que todos ellos estén en el mismo punto antes de continuar con alguna tarea en particular. Por ejemplo, se puede utilizar un objeto Event
para hacer que varios threads esperen a que se complete alguna tarea en otro thread antes de continuar con su ejecución.
En el ejemplo de la tortuga y la liebre que mencionamos anteriormente, se utiliza un objeto Event
para hacer que la liebre espere a que la tortuga termine de correr antes de comenzar su propia carrera. En resumen, threading.Event
es una herramienta útil para coordinar y sincronizar la ejecución de múltiples threads en Python.