Qual é a diferença entre ThreadPool vs Pool no módulo de multiprocessamento Python
Qual é a diferença entreThreadPool
ePool
nomultiprocessing
módulo. Quando tento meu código, esta é a principal diferença que vejo:
from multiprocessing import Pool
import os, time
print("hi outside of main()")
def hello(x):
print("inside hello()")
print("Proccess id: ", os.getpid())
time.sleep(3)
return x*x
if __name__ == "__main__":
p = Pool(5)
pool_output = p.map(hello, range(3))
print(pool_output)
Eu vejo a seguinte saída:
hi outside of main()
hi outside of main()
hi outside of main()
hi outside of main()
hi outside of main()
hi outside of main()
inside hello()
Proccess id: 13268
inside hello()
Proccess id: 11104
inside hello()
Proccess id: 13064
[0, 1, 4]
Com "ThreadPool":
from multiprocessing.pool import ThreadPool
import os, time
print("hi outside of main()")
def hello(x):
print("inside hello()")
print("Proccess id: ", os.getpid())
time.sleep(3)
return x*x
if __name__ == "__main__":
p = ThreadPool(5)
pool_output = p.map(hello, range(3))
print(pool_output)
Eu vejo a seguinte saída:
hi outside of main()
inside hello()
inside hello()
Proccess id: 15204
Proccess id: 15204
inside hello()
Proccess id: 15204
[0, 1, 4]
Minhas perguntas são:
por que o "domínio externo __ ()" é executado sempre quePool
?
multiprocessing.pool.ThreadPool
não gera novos processos? Ele apenas cria novos tópicos?
Em caso afirmativo, qual é a diferença entre usarmultiprocessing.pool.ThreadPool
ao contrário de apenasthreading
módulo?
Não vejo nenhuma documentação oficial paraThreadPool
em qualquer lugar, alguém pode me ajudar onde eu posso encontrar?