Python Threadpool

Fumbani Banda 30 janvier 2023
  1. Définition du pool de threads
  2. Différences entre multiprocessing.pool.ThreadPool et multiprocessing.Pool
  3. multiprocessing.Pool en Python
  4. multiprocessing.pool.Threadpool en Python
Python Threadpool

Ce tutoriel montrera la différence entre Pool de multiprocessing et ThreadPool de multiprocessing.pool

Définition du pool de threads

Un pool de threads est un groupe de threads inactifs pré-instanciés qui sont prêts à recevoir du travail. La création d’un nouvel objet thread pour chaque tâche à exécuter de manière asynchrone coûte cher. Avec un pool de threads, vous ajouteriez la tâche à une file d’attente de tâches, et le pool de threads attribue un thread disponible pour la tâche. Le pool de threads permet d’éviter de créer ou de détruire plus de threads que nécessaire.

Différences entre multiprocessing.pool.ThreadPool et multiprocessing.Pool

multiprocessing.pool.ThreadPool se comporte de la même manière que multiprocessing.Pool. La différence est que multiprocessing.pool.Threadpool utilise des threads pour exécuter la logique du travailleur tandis que multiprocessing.Pool utilise des processus de travail.

multiprocessing.Pool en Python

Le code ci-dessous générera 4 processus différents qui exécuteront chacun la fonction 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)

Production:

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

multiprocessing.pool.Threadpool en Python

ThreadPool générera 4 threads qui exécuteront la fonction sleepy() au lieu des processus de travail.

# 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)

Production:

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

Article connexe - Python Threading