如何确保子流程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)))

希望这能澄清你的疑虑。此外,上面的代码片段是Pool((在python中的示例实现。请根据您的要求进行修改。

谢谢,AG

最新更新