Google+ Seguidores

lunes, 30 de julio de 2018

Multihilo y multiprocesamiento - Procesamiento Paralelo en Python

Introducción:

Hola amigos de Internet, les doy la bienvenida a Mi Diario Python, el mejor blog para Aprender Python.

"Muchas manos hacen el trabajo ligero", este es un refrán que ilustra la ventaja que nos ofrece el multiprocesamiento.

En el este articulo nos centraremos en entender y saber como utilizar el procesamiento paralelo en Python. 

Realizaremos 2 ejemplos. El primero nos ayudara a entender el proceso de multihilos y el segundo sera un ejemplo del multiprocesamiento.

Imagen relacionada

Multihilo y Multiprocesamiento

Antes de empezar a trabajar, debes trazar las diferencias entre multihilo y multiprocesamiento, ya que ambos son procesos diferentes y son utilizados en determinados procedimientos.

El multiprocesamiento son múltiples procesos que se ejecutan utilizando  uno o mas procesadores. 

Multihilo es el proceso en el que multiples hilos se ejecutan al mismo tiempo en un proceso.

Procesos mejorados con Multihilos:
  • Webscraping
  • leer y escribir en archivos
  • compartir datos entre programas
  • comunicaciones de red
Procesos intensivos en CPU mejorados utilizando el multiprocesammiento:
  • calculos
  • formatos de texto
  • cambio de imagen
  • análisis de datos

Ejemplo de Multihilos:

Realicemos un ejemplo. Para ello utilizaremos el modulo threading de la libreria estandar de Python.

import threading
import datetime
 
class ThreadClass(threading.Thread):
    
  def run(self):
    now = datetime.datetime.now()
    print("%s dice hola en el tiempo: %s" % 
    (self.getName(), now))
 
for i in range(2):
  t = ThreadClass()
  t.start()


Thread-1 dice hola en el tiempo: 2018-07-30 12:31:56.951899
Thread-2 dice hola en el tiempo: 2018-07-30 12:31:56.985901

Como podemos observar al ejecutar el ejemplo, los mensajes se imprimen en pantalla al mismo tiempo.

Al importar el modulo threading tenemos acceso a todos sus métodos. Para poder imprimir el tiempo en el que se ejecuta cada proceso hemos importado el modulo datetime.

En el ejemplo hemos creado una clase llamada "ThreadClass", la cual hereda métodos de la clase "Thread" perteneciente al modulo "threading". 

En el método run definimos los procesos que se ejecutaran. Luego de crear la instancia de nuestra clase, observa,os que llamamos al método start para iniciar los procesos.

Ejemplo de Multiprocesamiento:

A continuación, realizaremos un ejemplo de multiprocesamiento utilizando el modulo multiprocessing de la librería estándar de Python.

from multiprocessing.dummy import Pool as ThreadPool
import urllib3

pool = ThreadPool(4) 

urls = [
'https://www.python.org', 'https://www.yahoo.com',
'https://www.google.com', 'http://pythondiario.com'
]

results = pool.map(urllib3.connection_from_url, urls)

for re in results:
    print(re)

pool.close() 
pool.join()

HTTPSConnectionPool(host='www.python.org', port=443)
HTTPSConnectionPool(host='www.yahoo.com', port=443)
HTTPSConnectionPool(host='www.google.com', port=443)
HTTPConnectionPool(host='pythondiario.com', port=80)

El código anterior, tienen el objetivo de hacer una conexión a 4 servidores web mediante su respectiva URL.

Lo que hacemos es crear una instancia de ThreadPool y pasarle como argumento el numero de trabajos (procesos) que se realizaran paralelamente, en este caso 4. Luego declaramos una lista con las URL a las cuales realizaremos conexiones. Creamos una variables "result" la cual contendrá el resultado de los procesos. 

De no usar "multiprocessing", tendríamos que esperar que se estableciera una conexión por vez.  

Te recomiendo seguir leyendo sobre este tema:

¿Te gusta este tipo de tema? Déjamelo saber para escribir más artículos como este.

Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes 

2 comentarios :
Write comentarios
  1. Hola buen dia, me gustaría saber mas de este tema, si pudieran explicar este tema enfocado hacia Raspberry seria muy interesante.
    Gracias me gustan muchos sus articulos

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Powered by Blogger .