我正在使用 multiprocessing.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])
multiprocessing.Pool
每个进程不会创建多个线程,而是多个单线程进程。"并行过程"是指在并行的多个过程中运行的多个过程。
multiprocessing.Pool
中的每个过程都会一次恰好在一个核心上运行,因此您应该创建尽可能多的过程,并使用要使用核心 - 在这种情况下,如果您想使用所有八个内核,则需要八个进程在池中:
pool = Pool(8)
您也无法完全通过参数,Pool
将自动分配与CPU内核一样多的过程。
multiprocessing.Pool
的文档:
但是,请注意,您实际上不能告诉过程是要使用的工作过程数量。如果 Processes 是
None
,则使用os.cpu_count()
返回的数字。
Pool
使用特定的核心或特定数量的内核 - 该决定是由您的操作系统做出的,这通常会尝试在核心之间均匀分配工作负载。
否,您的代码将允许Pool
创建两个进程(它们每个核心使用一个核心(,并且map()
将通过两个流中指定的功能处理您的项目收集。
我认为您可能的意思是:
pool = Pool(4)
这将意味着您的fun
将同时在4个内核上运行。