La creación de subprocesos en Python permite a los procesadores ejecutar varias partes del programa simultáneamente utilizando los recursos correctamente. El concepto de subprocesamiento aumenta la velocidad de ejecución de un programa. Python Threading se utiliza principalmente para tareas relacionadas con Entrada/Salida, es decir, tareas que pasan más tiempo en Entrada/Salida que en procesar (o) el cálculo.
La ventaja de los subprocesos se puede conocer mejor cuando se compara un programa de Python de un solo subproceso con un programa de subprocesos múltiples.
Introducción a los hilos en Python [Understand With Examples]
Programa Python de un solo subproceso
El siguiente código es un programa simple de un solo subproceso:
Código
# import necessary packages import time # function def executeTask(): print('Task Execution started') time.sleep(2) print('Execution completed') program_startTime=time.perf_counter() # execute 3 tasks executeTask() executeTask() executeTask() program_endTime=time.perf_counter() print(f'Time Taken to complete all tasks : {program_endTime-program_startTime:0.3f} seconds')
Producción
Comenzó la ejecución de la tarea
Ejecución completada
Comenzó la ejecución de la tarea
Ejecución completada
Comenzó la ejecución de la tarea
Ejecución completada
Tiempo necesario para completar todas las tareas: 6.030 segundos
Explicación
- Biblioteca de tiempo importada para usar los métodos sleep () y perf_counter ().
- La función executeTask() está definida de tal forma que ejecuta una tarea con un tiempo de pausa de 2 segundos.
- El método sleep () hace que la CPU esté inactiva durante ciertos segundos.
- time.perf_counter () se utiliza para anotar el tiempo de inicio y finalización de la ejecución del programa para encontrar el
- tiempo total de ejecución, es decir, hora de finalización – hora de inicio.
- Llamamos a la función executeTask 3 veces, es decir, para ejecutar 3 tareas.
En cuanto al programa, la ejecución de la tarea 1 comienza y se detiene durante 2 segundos, luego completa la ejecución de la tarea y la ejecución de la segunda tarea comienza y luego se detiene durante 2 segundos y finaliza su ejecución, y lo mismo se repite para la tarea 3.
Aquí el uso de recursos es mínimo porque no se realizan actividades al mismo tiempo. El tiempo de pausa entre 2 actividades no es utilizado por otras actividades/procesos. Entonces, para aumentar la velocidad de ejecución y el uso de recursos, entra en juego el concepto de subprocesamiento.
Programa multiproceso en Python
Para implementar el concepto de subprocesos en Python, importe la clase Thread desde el módulo de subprocesos. Para crear el subproceso en python, use la función Subproceso que toma dos parámetros de destino, que especifican la función, y otros parámetros de argumentos de tipo tupla, que especifican los argumentos.
A continuación se muestra la sintaxis para crear un hilo.
Thread1 = Thread(target=functionName, args=(arg1,arg2,..))
Hay dos métodos utilizados en los programas multiproceso. Estoy:
- Comienzo() – El método start () ayuda a iniciar la ejecución del hilo.
- Articulación () – El método join () permite que el subproceso principal espere a que se complete el segundo u otro subproceso antes de finalizar.
Echemos un vistazo a un programa Python simple de subprocesos múltiples sin argumentos:
Código
# import necessary packages import time from threading import Thread # function def executeTask(): print('Task Execution started') time.sleep(2) print('Execution completed') program_startTime=time.perf_counter() # create three threads thread1 = Thread(target=executeTask) thread2 = Thread(target=executeTask) thread3 = Thread(target=executeTask) # start threads thread1.start() thread2.start() thread3.start() # wait for threads to complete thread1.join() thread2.join() thread3.join() program_endTime=time.perf_counter() print(f'Time Taken to complete all tasks : {program_endTime-program_startTime:0.3f} seconds')
Producción
Comenzó la ejecución de la tarea
Comenzó la ejecución de la tarea
Comenzó la ejecución de la tarea
Ejecución completada
Ejecución completada
Ejecución completada
Tiempo necesario para completar todas las tareas: 2023 segundos
Explicación
Biblioteca de tiempo importada para usar los métodos sleep (), perf_counter () y la clase Thread para crear Thread.
- La función executeTask() está definida de tal forma que ejecuta una tarea con un tiempo de pausa de 2 segundos.
- sleep () hace que la CPU esté inactiva durante ciertos segundos.
- time.perf_counter () se usa para anotar la hora de inicio y la hora de finalización de la ejecución del programa para encontrar el tiempo total de ejecución, es decir, la hora de finalización, la hora de inicio.
- Creé 3 hilos usando el método Thread ().
- El método start () se utiliza para iniciar la ejecución de hilos.
- El método join () permite que el subproceso principal espere a que se completen los otros subprocesos.
A continuación se muestra la vista pictórica de la ejecución de tres subprocesos para el programa anterior.
La diferencia entre los programas de subproceso único y los de subprocesos múltiples es que los tres subprocesos/tareas se ejecutarán simultáneamente en el programa de subprocesos múltiples.
Podemos ver en la salida de resultados que el tiempo de ejecución es solo 2.023 segundos en lugar de 6 segundos como para el programa de un solo subproceso debido al mayor uso de recursos.
Durante el tiempo de suspensión de un subproceso, la CPU no espera a que el subproceso actual complete su ejecución. Procese los otros hilos/actividades.
Cuando el programa comience su ejecución, el intérprete creará el hilo principal y el programa creará los tres hilos/tareas.
A continuación se muestra el programa multihilo que pasa argumentos mientras se crea el hilo.
Código
# import necessary packages import time from threading import Thread # function def executeTask(number): print(f'Task {number} Execution started') time.sleep(2) print(f'Task {number} Execution completed') program_startTime=time.perf_counter() # list which stores all created threads threads=[] # create and start three threads for i in range(1,4): thread = Thread(target=executeTask,args=(i,)) threads.append(thread) thread.start() for thread in threads: thread.join() program_endTime=time.perf_counter() print(f'Time Taken to complete all tasks : {program_endTime-program_startTime:0.3f} seconds')
Producción
Tarea 1 Ejecución iniciada
Comenzó la ejecución de la tarea 2
Comenzó la ejecución de la tarea 3
Tarea 1 Ejecución completada
Tarea 2 Ejecución completada
Tarea 3 Ejecución completada
Tiempo necesario para completar todas las tareas: 2024 segundos
Solo hay algunas diferencias con el código anterior, es decir, un programa multiproceso sin argumentos, en comparación con el código anterior, es decir, un programa multiproceso con argumentos.
- Definido el método executeTask() con un argumento.
- Pasó una tupla al argumento args al crear un hilo.
Nota: El orden de ejecución de la tarea/subproceso es incorrecto. Aquí todas las tareas se realizan en orden según la entrada, pero no siempre sucederá.
Más tutoriales de Python:
- Programa Python para invertir un número
- ¿Cómo usar Python para el desarrollo de juegos de navegador?
- Programa Python para encontrar la suma de los dígitos [5 Methods]
- Programa Python para comprobar si un número es un cuadrado perfecto
- 35 divertidos y mejores memes de programación en Python
- 60 mejores citas sobre desarrollo de software
- Envío de correos electrónicos usando Python con archivos adjuntos de imagen y PDF