首页 > 解决方案 > 如何告诉 Pool 每个进程使用一定数量的核心?

问题描述

multiprocessing.Pool用来并行化项目中的一些计算。如何告诉 Pool 每个并行进程使用 n 个(例如 4 个)内核?

假设我有 8 个核心。这段代码会确保每个并行进程都在 4 个内核上运行吗?

from multiprocessing import Pool

def fun(in):
    print(in)

pool = Pool(2)
pool.map(fun, [1, 2, 3, 4, 5, 6])

标签: pythonmultiprocessingpool

解决方案


multiprocessing.Pool不会为每个进程创建多个线程,而是创建多个单线程进程。“并行进程”是指并行运行的多个进程,而不是在某种程度上内部并行的单个进程。

a 中的每个进程一次multiprocessing.Pool只能在一个内核上运行,因此您应该创建尽可能多的进程以使用内核 - 在这种情况下,如果您想潜在地利用所有八个内核,则需要池中有八个进程:

pool = Pool(8)

您也可以根本不传递参数,并且Pool会自动分配与 CPU 内核一样多的进程。

文档multiprocessing.Pool

processes是要使用的工作进程的数量。如果processes是,则使用None返回的数字os.cpu_count()

但是请注意,您实际上无法确定Pool使用特定内核或特定数量的内核 - 该决定由您的操作系统做出,通常会尝试在内核之间平均分配工作负载。


推荐阅读