IO связанные задания -> multiprocessing.pool.ThreadPool?

разница междуThreadPool а такжеPool вmultiprocessing модуль. Когда я пробую свой код, я вижу главное отличие:

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)

Я вижу следующий вывод:

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]

С "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)

Я вижу следующий вывод:

hi outside of main()
inside hello()
inside hello()
Proccess id:  15204
Proccess id:  15204
inside hello()
Proccess id:  15204
[0, 1, 4]

Мои вопросы:

почему «external __main __ ()» запускается каждый раз вPool?

multiprocessing.pool.ThreadPool не порождает новые процессы? Это просто создает новые темы?

Если так, то какая разница между использованиемmultiprocessing.pool.ThreadPool в отличие от простоthreading модуль?

Я не вижу официальной документации дляThreadPool где-нибудь, может кто-нибудь помочь мне, где я могу найти это?

Ответы на вопрос(1)

Ваш ответ на вопрос