Trabajando con Hilos
Desliza para mostrar el menú
El módulo threading de Python proporciona una forma sencilla pero potente de crear y gestionar hilos, lo que permite ejecutar múltiples operaciones de manera concurrente dentro de un solo proceso. Los hilos son unidades ligeras de ejecución que comparten el mismo espacio de memoria, lo que los hace adecuados para tareas como operaciones de entrada/salida, espera de recursos externos o actualización de interfaces de usuario.
El ciclo de vida de un hilo normalmente implica varias etapas:
- Creación: se instancia un objeto hilo pero aún no se inicia;
- Inicio: se llama al método
start()del hilo, pasando al estado listo para ejecutarse; - Ejecución: el hilo ejecuta su función objetivo;
- Terminación: el hilo finaliza su ejecución, ya sea completando su tarea o al encontrar una excepción no controlada.
La gestión de hilos requiere especial atención a la sincronización, ya que los hilos comparten datos y recursos. Sin una sincronización adecuada, pueden producirse condiciones de carrera o estados inconsistentes. El módulo threading ofrece primitivas como Lock, RLock y Event para ayudar a coordinar el acceso de los hilos a los recursos compartidos.
A continuación se muestra una tabla con funciones que te ayudarán a crear, gestionar y sincronizar hilos de manera eficaz al trabajar con tareas concurrentes en Python.
El siguiente ejemplo demuestra cómo puedes crear e iniciar múltiples hilos utilizando el módulo threading, permitiendo que varias tareas se ejecuten de forma concurrente.
123456789101112131415161718192021import threading import time def print_numbers(name): for i in range(1, 4): print(f"Thread {name}: {i}") time.sleep(0.5) # Create thread objects thread1 = threading.Thread(target=print_numbers, args=("A",)) thread2 = threading.Thread(target=print_numbers, args=("B",)) # Start the threads thread1.start() thread2.start() # Wait for both threads to finish thread1.join() thread2.join() print("Both threads have finished.")
Se define una función, print_numbers, que imprime una secuencia de números junto con el nombre del hilo. Al crear cada hilo, se pasan argumentos utilizando el parámetro args; en este caso, cada hilo recibe un nombre diferente ("A" o "B") para distinguir fácilmente sus salidas. Al llamar al método start(), ambos hilos comienzan su ejecución y se ejecutan de manera concurrente. La llamada a time.sleep(0.5) dentro del bucle simula una demora en la ejecución, lo que permite que los hilos entrelacen sus salidas y facilita observar que ambos hilos están funcionando al mismo tiempo. Luego, se utiliza el método join() para esperar a que ambos hilos finalicen antes de continuar, asegurando que el programa principal no termine prematuramente. Este enfoque permite que las tareas se ejecuten en paralelo, aprovechando eficientemente los tiempos de espera y habilitando la ejecución concurrente dentro de un solo proceso.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla