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
где-нибудь, может кто-нибудь помочь мне, где я могу найти это?