如何告诉Pool每个进程使用一定数量的内核?

时间:2019-05-24 15:44:54

标签: python multiprocessing 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])

2 个答案:

答案 0 :(得分:1)

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

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

pool = Pool(8)

您也完全不能传递参数,Pool将自动分配与您拥有CPU内核一样多的进程。

Documentation for multiprocessing.Pool

  

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

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

答案 1 :(得分:0)

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

我想你可能是说:

pool = Pool(4)

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