Python 线程池
Fumbani Banda
2023年1月30日
- 线程池定义
-
multiprocessing.pool.ThreadPool
和multiprocessing.Pool
之间的差异 -
Python 中的
multiprocessing.Pool
-
Python 中的
multiprocessing.pool.Threadpool
本教程将展示 multiprocessing
中的 Pool
和 multiprocessing.pool
中的 ThreadPool
之间的区别
线程池定义
线程池是一组预先实例化的空闲线程,准备好接受工作。为每个要异步执行的任务创建一个新的线程对象是很昂贵的。使用线程池,你可以将任务添加到任务队列,线程池为任务分配一个可用线程。线程池有助于避免创建或销毁不必要的线程。
multiprocessing.pool.ThreadPool
和 multiprocessing.Pool
之间的差异
multiprocessing.pool.ThreadPool
的行为方式与 multiprocessing.Pool
相同。不同之处在于 multiprocessing.pool.Threadpool
使用线程来运行 worker 的逻辑,而 multiprocessing.Pool
使用工作进程。
Python 中的 multiprocessing.Pool
下面的代码将产生 4 个不同的进程,每个进程将运行函数 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)
输出:
Process Id 239
Process Id 240
Process Id 241
Process Id 242
[0, 1, 2, 3]
Python 中的 multiprocessing.pool.Threadpool
ThreadPool
将生成 4 个运行 sleepy()
函数而不是工作进程的线程。
# 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)
输出:
Process Id 217
Process Id 217
Process Id 217
Process Id 217
[0, 1, 2, 3]
作者: Fumbani Banda