¿Cómo ejecutar la misma función en múltiples hilos en Python?

En una gran aplicación del mundo real, los módulos y las funciones tienen que pasar por muchas tareas basadas en entradas y salidas, como leer o actualizar bases de datos, comunicarse con diferentes microservicios y solicitar y responder con clientes o compañeros. Estas tareas pueden tardar bastante tiempo en completarse.

El tiempo que se tarda en atender una solicitud y responder al cliente se denomina latencia y los programadores deben reducir la latencia tanto como sea posible. Esto lleva a la necesidad de un procesamiento paralelo donde nuestra aplicación puede ejecutar alguna función o método con diferentes parámetros para diferentes clientes. Podemos lograr eso usando subprocesos. Un hilo puede ejecutar una función en paralelo con otros hilos. Cada subproceso comparte el mismo código, datos y archivos mientras tienen su propia pila y registros.

Módulo utilizado:

En Python, podemos crear y ejecutar subprocesos utilizando el módulo de subprocesos . Este módulo en python proporciona soporte potente y de alto nivel para subprocesos.

Enfoque paso a paso:

  • Importar las bibliotecas. Usaremos el módulo de subprocesamiento para crear y ejecutar el subproceso. Para observar la salida, crearemos algún retraso usando el módulo de tiempo .
import threading
import time
  • Defina una función de muestra que usaremos para ejecutar en diferentes subprocesos. En este ejemplo, hagamos una función que imprima los cuadrados de los números en la lista dada.
# A sample function to print squares
def print_squares(thread_name, numbers):

   for number in numbers:
       print(thread_name, number**2)
       
       # Produce some delay to see the output
       # syntax: time.sleep(<time in seconds : float>)
       time.sleep(1)
  • Ahora cree 2 o más hilos usando la clase threading.Thread . La sintaxis para crear un hilo se da a continuación:

Sintaxis: thread_object = threading.Thread(target=<nombre de función>, args=<tupla de argumentos que desea pasar>)

# Creating 3 threads that execute the same function with different parameters
thread1 = threading.Thread(
   target=print_squares, args=("thread1", [1, 2, 3, 4, 5]))
   
thread2 = threading.Thread(
   target=print_squares, args=("thread2", [6, 7, 8, 9, 10]))
   
thread3 = threading.Thread(
   target=print_squares, args=("thread3", [11, 12, 13, 14, 15]))
  • Ahora tenemos que empezar la ejecución. La clase Thread tiene un método start() que transita el hilo en modo de ejecución. Los subprocesos se ejecutarán hasta que no se completen.
# Start the threads
thread1.start()
thread2.start()
thread3.start()
  • Podemos bloquear la ejecución del programa mientras no se completan todos los hilos usando el método join() de la clase Thread.
# Join the threads before moving further
thread1.join()
thread2.join()
thread3.join()

A continuación se muestra el código completo:

Python3

# Import module
import threading
import time
  
  
# A sample function to print squares
def print_squares(thread_name, numbers):
    
    for number in numbers:
        print(thread_name, number**2)
          
        # Produce some delay to see the output
        time.sleep(1)
  
  
# Creating 3 threads that execute the same 
# function with different parameters
thread1 = threading.Thread(target=print_squares, 
                           args=("thread1", [1, 2, 3, 4, 5]))
  
thread2 = threading.Thread(target=print_squares, 
                           args=("thread2", [6, 7, 8, 9, 10]))
  
thread3 = threading.Thread(target=print_squares, 
                           args=("thread3", [11, 12, 13, 14, 15]))
  
# Start the threads
thread1.start()
thread2.start()
thread3.start()
  
# Join the threads before 
# moving further
thread1.join()
thread2.join()
thread3.join()

Producción:

Publicación traducida automáticamente

Artículo escrito por deepanshu_rustagi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *