Threadpool de Python

Fumbani Banda 30 enero 2023
  1. Definición de grupo de subprocesos
  2. Diferencias entre multiprocessing.pool.ThreadPool y multiprocessing.Pool
  3. multiprocessing.Pool en Python
  4. multiprocessing.pool.Threadpool en Python
Threadpool de Python

Este tutorial mostrará la diferencia entre Pool de multiprocessing y ThreadPool de multiprocessing.pool

Definición de grupo de subprocesos

Un grupo de subprocesos es un grupo de subprocesos inactivos previamente instanciados que están listos para recibir trabajo. La creación de un nuevo objeto de hilo para que cada tarea se ejecute de forma asincrónica es costosa. Con un grupo de subprocesos, agregaría la tarea a una cola de tareas y el grupo de subprocesos asigna un subproceso disponible para la tarea. El grupo de subprocesos ayuda a evitar crear o destruir más subprocesos de los que serían necesarios.

Diferencias entre multiprocessing.pool.ThreadPool y multiprocessing.Pool

multiprocessing.pool.ThreadPool se comporta de la misma manera que multiprocessing.Pool. La diferencia es que multiprocessing.pool.Threadpool usa subprocesos para ejecutar la lógica del trabajador mientras que multiprocessing.Pool usa procesos de trabajo.

multiprocessing.Pool en Python

El siguiente código generará 4 procesos diferentes, cada uno de los cuales ejecutará la función sleepy().

# python 3.x
from multiprocessing import Pool
import os
import time


def sleepy(x):
    print("Process Id", os.getpid())
    time.sleep(x)
    return x


if __name__ == "__main__":
    p = Pool(5)
    pool_output = p.map(sleepy, range(4))
    print(pool_output)

Producción :

Process Id 239
Process Id 240
Process Id 241
Process Id 242
[0, 1, 2, 3]

multiprocessing.pool.Threadpool en Python

ThreadPool generará 4 subprocesos que ejecutan la función sleepy() en lugar de procesos de trabajo.

# python 3.x
from multiprocessing.pool import ThreadPool
import os
import time


def sleepy(x):
    print("Process Id", os.getpid())
    time.sleep(x)
    return x


if __name__ == "__main__":
    p = ThreadPool(5)
    pool_output = p.map(sleepy, range(4))
    print(pool_output)

Producción :

Process Id 217
Process Id 217
Process Id 217
Process Id 217
[0, 1, 2, 3]
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

Artículo relacionado - Python Threading