多处理中基于线程的池
多处理模块提供了一个强大的“Pool”类,用于使用单独的进程并行化任务。然而,这种方法会因进程创建而产生开销。对于在实际函数调用期间释放 GIL 的 IO 绑定操作,使用线程可以获得更好的性能。
引入 ThreadPool 类
与普遍的看法相反,多处理模块确实提供了基于线程的池接口。这个隐藏的宝石可以通过 from multiprocessing.pool import ThreadPool 访问,提供了一种使用线程并行化任务的便捷方法。
尽管其未记录状态,ThreadPool 类使用包装 python 的虚拟 Process 类实现了多处理池接口线程。这个虚拟的 Process 类驻留在 multiprocessing.dummy 模块中,该模块提供了基于线程的完整多处理接口。
示例用法
与 ProcessPool 类似,ThreadPool 可以用于并行化映射函数:
import multiprocessing.pool def long_running_func(p): c_func_no_gil(p) p = multiprocessing.pool.ThreadPool(4) xs = p.map(long_running_func, range(100))
注意: 在所有情况下,ThreadPool 类并不像 ProcessPool 那样高效,特别是当任务需要大量 CPU 时间时。
以上是我什么时候应该使用 Python 未记录的'ThreadPool”进行并行处理?的详细内容。更多信息请关注PHP中文网其他相关文章!