Python 线程池

Fumbani Banda 2023年1月30日
  1. 线程池定义
  2. multiprocessing.pool.ThreadPoolmultiprocessing.Pool 之间的差异
  3. Python 中的 multiprocessing.Pool
  4. Python 中的 multiprocessing.pool.Threadpool
Python 线程池

本教程将展示 multiprocessing 中的 Poolmultiprocessing.pool 中的 ThreadPool 之间的区别

线程池定义

线程池是一组预先实例化的空闲线程,准备好接受工作。为每个要异步执行的任务创建一个新的线程对象是很昂贵的。使用线程池,你可以将任务添加到任务队列,线程池为任务分配一个可用线程。线程池有助于避免创建或销毁不必要的线程。

multiprocessing.pool.ThreadPoolmultiprocessing.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
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

相关文章 - Python Threading