最佳答案
multiprocessing
模块中 ThreadPool
和 Pool
的区别是什么。当我试用我的代码时,我看到的主要区别是:
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]
使用“线程池”:
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]
我的问题是:
为什么在 Pool
中每次都运行“ outside _ _ main _ _ ()”?
multiprocessing.pool.ThreadPool
不产生新的进程? 它只是产生新的线程?
如果是这样的话,使用 multiprocessing.pool.ThreadPool
和仅仅使用 threading
模块有什么区别?
我没有看到任何关于 ThreadPool
的官方文件,有人能帮我在哪里找到它吗?