python - 如何告诉 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])
解决方案
multiprocessing.Pool
不会为每个进程创建多个线程,而是创建多个单线程进程。“并行进程”是指并行运行的多个进程,而不是在某种程度上内部并行的单个进程。
a 中的每个进程一次multiprocessing.Pool
只能在一个内核上运行,因此您应该创建尽可能多的进程以使用内核 - 在这种情况下,如果您想潜在地利用所有八个内核,则需要池中有八个进程:
pool = Pool(8)
您也可以根本不传递参数,并且Pool
会自动分配与 CPU 内核一样多的进程。
processes是要使用的工作进程的数量。如果processes是,则使用
None
返回的数字os.cpu_count()
。
但是请注意,您实际上无法确定Pool
使用特定内核或特定数量的内核 - 该决定由您的操作系统做出,通常会尝试在内核之间平均分配工作负载。
推荐阅读
- java - spring-data-rest 和微服务:具有@OneToOne 关系的实体与另一个 spring-data-rest 服务中的实体
- javascript - Javascript - 自动下载资源
- javascript - 接收默认推送通知 Firebase Cloud 消息 对于 Web
- css - 在文本区域 Bootstrap 4 旁边显示图像
- windows - Docker“hello-world”给出“进程无法访问该文件,因为它正被另一个进程使用”
- javascript - 在父组件 componentDidMount 完成后渲染子组件
- asp.net - 由 Facebook React 代码组成的节点模块可以在 ASP.NET Core 中工作吗?
- javascript - 我的组件如何在不重复代码的情况下在另一个组件中工作?
- laravel - Laravel 获取 JSON 列 MariaDB 语法错误
- css - 无法以角度获取openlayers css