首页 > 解决方案 > 如何确保子进程 Popen 在 Windows 中以优化的方式将创建的实例分布在多个 CPU 内核上?

问题描述

我正在为 Windows 编程,在我的 python 3 应用程序中,我使用子进程 Popen 来运行大约 32 个应用程序实例。

现在假设我有一个 32 核 CPU,Windows 操作系统会自动以优化的方式将实例分布在内核之间吗?还是我需要在 Popen 中指定任何标志或做其他事情才能这样做?

基本上我想给这 32 个实例尽可能高的优先级,并希望确保应用程序的这 32 个实例以最佳方式使用内核,例如,如果我有 32 个内核,则两个实例都不应该放在一个内核中,我'我只是不知道我怎么能做到这一点?

标签: pythonpython-3.xwindowsmultiprocessing

解决方案


我相信您的想法的解决方案是 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


推荐阅读