python - 如何确保子进程 Popen 在 Windows 中以优化的方式将创建的实例分布在多个 CPU 内核上?
问题描述
我正在为 Windows 编程,在我的 python 3 应用程序中,我使用子进程 Popen 来运行大约 32 个应用程序实例。
现在假设我有一个 32 核 CPU,Windows 操作系统会自动以优化的方式将实例分布在内核之间吗?还是我需要在 Popen 中指定任何标志或做其他事情才能这样做?
基本上我想给这 32 个实例尽可能高的优先级,并希望确保应用程序的这 32 个实例以最佳方式使用内核,例如,如果我有 32 个内核,则两个实例都不应该放在一个内核中,我'我只是不知道我怎么能做到这一点?
解决方案
我相信您的想法的解决方案是 Python 中的多处理中的 Pool()。请阅读此处的文档https://docs.python.org/3/library/multiprocessing.html以获取详细信息。
基本上, Pool 对象提供了一种方便的方法,可以跨多个输入值并行执行函数(在您的情况下,我们将说是应用程序),跨进程分布输入数据(数据并行性)。
下面是一个示例片段,可用于创建 N 个并行进程,这些进程将均匀分布到 CPU 的所有内核。
import datetime
from multiprocessing import Pool
import time
def init_application(x):
time.sleep(2)
# Initiate your application here, which will be added to the pool for processing.
print(datetime.datetime.now())
return x*x
if __name__ == '__main__':
p = Pool() # Distributes to all available CPU cores
print(p.map(init_application, range(10)))
希望这能澄清你的疑问。此外,上面的代码片段是 Python 中 Pool() 的示例实现。请根据您的要求进行修改。
谢谢, AG
推荐阅读
- python - 如何在 Python websocket 中查看关闭连接的状态码?
- c - Can s 进程在两种不同类型的套接字上进行通信
- react-native - 我的代码正在从 JSON 中获取部分数据,而在某些数据上显示未定义
- c++ - 查找通过 CMakeLists 拉入项目的库版本
- kubernetes - 是否有任何类似 HPA 的控制器可以按需扩展/缩小 Pod?
- react-native - React native react-addons-perf 导入问题
- karate - 如何匹配来自空手道功能文件中外部方法的布尔值
- java - 将一天添加到一个日历变量会影响其他变量
- java - Android 中 AudioPresentation 类有什么用?
- typescript - Angular 7 Http 获取请求发送对象作为参数