Python Threadpool

Fumbani Banda 30 janeiro 2023
  1. Definição de pool de threads
  2. Diferenças entre multiprocessing.pool.ThreadPool e multiprocessing.Pool
  3. multiprocessing.Pool em Python
  4. multiprocessing.pool.Threadpool em Python
Python Threadpool

Este tutorial mostrará a diferença entre Pool de multiprocessing e ThreadPool de multiprocessing.pool

Definição de pool de threads

Um pool de encadeamentos é um grupo de encadeamentos ociosos pré-instanciados que estão prontos para receberem trabalho. Criar um novo objeto de thread para cada tarefa a ser executada de forma assíncrona é caro. Com um conjunto de encadeamentos, você adicionaria a tarefa a uma fila de tarefas, e o conjunto de encadeamentos atribuiria um encadeamento disponível para a tarefa. O pool de threads ajuda a evitar a criação ou destruição de mais threads do que o necessário.

Diferenças entre multiprocessing.pool.ThreadPool e multiprocessing.Pool

multiprocessing.pool.ThreadPool se comporta da mesma maneira que multiprocessing.Pool. A diferença é que multiprocessing.pool.Threadpool usa threads para executar a lógica do trabalhador, enquanto multiprocessing.Pool usa processos de trabalho.

multiprocessing.Pool em Python

O código abaixo irá gerar 4 processos diferentes, cada um deles executando a função 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)

Resultado:

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

multiprocessing.pool.Threadpool em Python

ThreadPool irá gerar 4 threads que executam a função sleepy() ao invés de processos de trabalho.

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

Resultado:

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