¿Qué es Mutithreading en Python y cómo lograrlo?



Aprenda qué es la multitarea en Python. También explica cómo crear subprocesos múltiples sin crear una clase, extendiendo la clase Thread y sin extenderla.

El tiempo es el factor más crítico de la vida. Debido a su importancia, el mundo de la programación proporciona diversos trucos y técnicas que te ayudan significativamente a reducir el consumo de tiempo, aumentando así el rendimiento. Uno de estos enfoques es el subproceso múltiple en Python, que es uno de los conceptos más importantes cubiertos en .

Aquí hay un resumen rápido de todas las especialidades cubiertas en este artículo:





Que es multitarea en Python?
¿Qué es un hilo?
¿Qué es el multihilo en Python?
¿Cuándo usar multiproceso en Python?
¿Cómo lograr multiproceso en Python?
¿Cómo crear hilos en Python?

Ventajas de usar subprocesos múltiples en Python



Para empezar, primero intentemos comprender la multitarea antes de comenzar a aprender sobre el subproceso múltiple en Python.

¿Qué es la multitarea en Python?

La multitarea, en general, es la capacidad de realizar múltiples tareas simultáneamente. En términos técnicos, la multitarea se refiere a la capacidad de un sistema operativo para realizar diferentes tareas al mismo tiempo. Por ejemplo , estás descargando algo en tu PC, además de escuchar canciones y al mismo tiempo jugar un juego, etc. Todas estas tareas las realiza el mismo sistema operativo y en sincronía. Esto no es más que una multitarea que no solo le ayuda a ahorrar tiempo, sino que también aumenta la productividad.

Hay dos tipos de multitarea en un sistema operativo:



  • Basado en procesos
  • Basado en hilos

En este artículo, aprenderá sobre Basado en hilos multitarea o Multihilo .

¿Qué es un hilo?

subprocesos múltiples en python-edurekaUn hilo es básicamente un independiente flujo de ejecución. Un solo proceso puede constar de varios subprocesos. Cada hilo de un programa realiza una tarea particular. Por ejemplo, cuando juegas un juego, di FIFA en tu PC, el juego en su conjunto es un proceso único , pero consta de varios subprocesos encargados de reproducir la música, recibir información del usuario, ejecutar al oponente de forma síncrona, etc. Todos estos son subprocesos separados responsables de llevar a cabo estas diferentes tareas en el mismo programa.

Cada proceso tiene un hilo que siempre se está ejecutando. Este es el hilo principal. Este hilo principal en realidad crea los objetos del hilo hijo. El hilo secundario también es iniciado por el hilo principal. Les mostraré a todos más en este artículo cómo verificar el hilo en ejecución actual.

Entonces, con esto, espero que hayas entendido claramente qué es un hilo. Continuando, veamos qué es el subproceso múltiple en Python.

¿Cuándo usar Multithreading en Python?

El subproceso múltiple es muy útil para ahorrar tiempo y mejorar el rendimiento, pero no se puede aplicar en todas partes.
En el ejemplo anterior de FIFA, el hilo musical es independiente del hilo que toma tu entrada y el hilo que toma tu entrada es independiente del hilo que ejecuta tu oponente. Estos subprocesos se ejecutan de forma independiente porque no son interdependientes.

Por lo tanto, el subproceso múltiple solo se puede utilizar cuando no existe la dependencia entre subprocesos individuales.

Este artículo muestra además cómo puede lograr el subproceso múltiple en Python.

¿Cómo lograr multiproceso en Python?

El subproceso múltiple en Python se puede lograr importando el enhebrar módulo.

Antes de importar este módulo, deberá instalarlo. Para instalar esto en su entorno anaconda, ejecute el siguiente comando en su indicador anaconda:

conda install -c conda-forge tbb

Una vez que se haya instalado correctamente, puede utilizar cualquiera de los siguientes comandos para importar el módulo de subprocesos:

importar subprocesos desde la importación de subprocesos *

Ahora que tiene el módulo de subprocesos instalado, sigamos adelante y hagamos subprocesos múltiples en Python.

¿Cómo crear hilos en Python?


Los subprocesos en Python se pueden crear de tres formas:

  1. Sin crear una clase
  2. Extendiendo la clase Thread
  3. Sin extender la clase Thread

Sin crear una clase

El subproceso múltiple en Python también se puede lograr sin crear una clase. Aquí hay un ejemplo para demostrar lo mismo:

Ejemplo:

ordenar biblioteca c ++
from thread import * print (current_thread (). getName ()) def mt (): print ('Child Thread') child = Thread (target = mt) child.start () print ('Ejecutando el nombre del hilo:', current_thread ( ) .getName ())

Salida:

MainThread Subproceso secundario Nombre del hilo de ejecución: MainThread

La salida anterior muestra que el primer hilo que está presente es el hilo principal. Este hilo principal luego crea un hilo hijo que está ejecutando la función y luego el hilo principal ejecuta de nuevo la declaración de impresión final.

Ahora sigamos adelante y veamos cómo hacer subprocesos múltiples en python extendiendo la clase Thread.

Al extender la clase Thread:

Cuando se crea una clase secundaria ampliando la clase Thread, la clase secundaria representa que un nuevo subproceso está ejecutando alguna tarea. Al extender la clase Thread, la clase secundaria puede anular solo dos métodos, es decir, el método __init __ () y el método run (). No se puede anular ningún otro método que no sean estos dos métodos.

Aquí hay un ejemplo de cómo extender la clase Thread para crear un hilo:

Ejemplo:

import threading import time class mythread (threading.Thread): def run (self): for x in range (7): print ('Hola del niño') a = mythread () a.start () a.join () print ('Adiós', current_thread (). GetName ())

Salida:
Hola desde niño
Hola desde niño
Hola desde niño
Hola desde niño
Hola desde niño
Hola desde niño
Hola desde niño
Adiós desde MainThread

El ejemplo anterior muestra que la clase myclass está heredando la clase Thread y la clase secundaria, es decir, myclass anula el método de ejecución. Por defecto, el primer parámetro de cualquier función de clase debe ser self, que es el puntero al objeto actual. La salida muestra que el subproceso secundario ejecuta el método run () y el subproceso principal espera a que se complete la ejecución del niño. Esto se debe a la función join (), que hace que el hilo principal espere a que el hijo termine.

Este método de creación de hilos es el método más preferido porque es el método estándar. Pero en caso de que desee crear subprocesos sin heredar o extender la clase Thread, puede hacerlo de la siguiente manera.

Sin clase de subproceso extendido

Para crear un hilo sin extender la clase Thread, puede hacer lo siguiente:
Ejemplo:

from threading import * class ex: def myfunc (self): #self necesario como primer parámetro en una clase func para x en el rango (7): print ('Child') myobj = ex () thread1 = Thread (target = myobj. myfunc) thread1.start () thread1.join () print ('hecho')

Salida:

Niño
Niño
Niño
Niño
Niño
Niño
Niño
hecho

El hilo secundario ejecuta myfunc después de lo cual el hilo principal ejecuta la última declaración de impresión.

Ventajas de usar hilo

El subproceso múltiple tiene muchas ventajas, algunas de las cuales son las siguientes:

  • Mejor utilización de recursos
  • Simplifica el código
  • Permite la ocurrencia simultánea y paralela de varias tareas
  • Reduce el consumo de tiempo o el tiempo de respuesta, aumentando así el rendimiento.

Aquí hay un ejemplo para verificar cuánto tiempo tarda un código en ejecutarse con y sin subprocesos múltiples en Python:

 Ejemplo: 
import time def sqr (n): for x in n: time.sleep (1) x% 2 def cube (n): for x in n: time.sleep (1) x% 3 n = [1,2,3 , 4,5,6,7,8] s = tiempo.tiempo () sqr (n) cubo (n) e = tiempo.tiempo () impresión (es)

Salida:

16.042309284210205

Lo anterior es el tiempo de salida que se tarda en ejecutar el programa sin utilizar subprocesos. Ahora usemos hilos y veamos qué sucede con el mismo programa:

Ejemplo:

importar subprocesos desde subprocesos importar * tiempo de importación def sqr (n): para x en n: tiempo.sleep (1) print ('El resto después de dividir por 2', x% 2) def cube (n): para x en n: time.sleep (1) print ('Resto después de dividir por 3', x% 3) n = [1,2,3,4,5,6,7,8] start = time.time () t1 = Thread ( target = sqr, args = (n,)) t2 = Thread (target = cube, args = (n,)) t1.start () time.sleep (1) t2.start () t1.join () t2.join () fin = hora.hora () imprimir (fin-inicio)
Salida: 9.040220737457275

El resultado anterior muestra claramente que el tiempo que se tarda cuando usamos subprocesos es mucho menor en comparación con el tiempo que tarda el mismo programa en ejecutarse sin usar subprocesos.

Espero que tenga claro los conceptos cubiertos en este artículo relacionados con el subproceso múltiple en Python. Asegúrese de practicar tanto como sea posible, ya que este es uno de los conceptos más importantes utilizados en la programación.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este blog 'Multithreading en Python' y nosotros será nos pondremos en contacto con usted lo antes posible.

Para obtener un conocimiento profundo de Python junto con sus diversas aplicaciones, puede inscribirse en Live con soporte 24/7 y acceso de por vida.