Python Threadpool
- Definição de pool de threads
-
Diferenças entre
multiprocessing.pool.ThreadPool
emultiprocessing.Pool
-
multiprocessing.Pool
em Python -
multiprocessing.pool.Threadpool
em Python
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]