我正在使用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])
答案 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个内核上运行。