Python 如何告诉池在每个进程中使用一定数量的内核?

Python 如何告诉池在每个进程中使用一定数量的内核?,python,multiprocessing,pool,Python,Multiprocessing,Pool,我正在使用multiprocessing.Pool来并行化项目中的一些计算。我如何告诉池在每个并行进程中使用n个(例如4个)核 假设我有8个核。此代码是否确保每个并行进程都在4个内核上运行 来自多处理导入池的 def fun(中文): 打印(以英文) 池=池(2) pool.map(有趣,[1,2,3,4,5,6]) 否,您的代码将允许池创建两个进程(每个进程使用一个核心),并且map()将通过两个流中的指定函数处理您的项目集合 我想你的意思可能是: pool = Pool(4) 这意味着您的

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

假设我有8个核。此代码是否确保每个并行进程都在4个内核上运行

来自多处理导入池的

def fun(中文):
打印(以英文)
池=池(2)
pool.map(有趣,[1,2,3,4,5,6])

否,您的代码将允许
池创建两个进程(每个进程使用一个核心),并且
map()
将通过两个流中的指定函数处理您的项目集合

我想你的意思可能是:

pool = Pool(4)

这意味着您的
fun
将同时在4个内核上运行。

多处理。池不会为每个进程创建多个线程,而是多个单线程进程。“并行进程”指并行运行的多个进程,而不是内部并行的单个进程

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

pool=pool(8)
您也不能传递任何参数,
Pool
将自动分配与CPU核心数量相同的进程

:

processes是要使用的工作进程数。如果进程为
None
,则使用返回的数字


但是,请注意,您实际上无法告诉
使用特定的核心或特定数量的核心-这一决定是由您的操作系统做出的,它通常会尝试在各个核心之间平均分配工作负载。

通常一个进程使用一个核心。
Pool
的参数是它将创建多少个进程。代码的思想是,如果我有2个线程在8核计算机上运行,那么工作负载将均匀分布,因此每个线程可以分布在4核上。谢谢!更具体地说,我的项目是关于用keras同时训练多个神经网络。我的问题来自这样一个事实:我注意到,如果我运行一个具有4个核心的培训(在一个集群上,我可以选择代码使用多少个核心),那么它比任何其他数量的核心都要快得多。所以我的目标是为每个线程提供4个内核(如果可能的话,强制每个线程只使用4个内核)。根据你所说的,如果操作系统平均分配工作负载,我只需要n_个内核/4个线程。@AlbertoRolandi我想澄清的是,
Pool
不允许在池中安排单个任务,然后在四个内核上执行。相反,您要做的是在池中安排四个任务,每个任务都可以在单独的核心上执行。在我看来,您的评论就像您认为8核系统上的
Pool(2)
每个进程将使用4个线程一样,而
Pool
不是这样工作的<代码>池(2)
不能使用超过2个内核。@AlbertoRolandi当我说“平均分配工作负载”时,我的意思是当你创建一个线程时,它可能会在负载最少的内核上执行。示例:您有4个内核。当您创建4个单线程进程时,很可能每个进程都将在不同的内核上执行,因为这样没有内核是空闲的,每个进程都会得到一个完整的内核。如果您创建了两个单线程进程,那么这些进程将分配给两个内核,而其他两个内核将处于空闲状态,什么也不做。您是对的,我知道一个线程可以使用多个内核。现在我明白你的意思了。我在实验中也注意到了这一点,如果我给它n个线程对应n个内核,它的运行速度会更快。你知道有哪个库可以让我选择一个线程使用多少内核吗?