Python 如何确保子进程Popen在Windows中以优化的方式将创建的实例分布到多个CPU核上?

Python 如何确保子进程Popen在Windows中以优化的方式将创建的实例分布到多个CPU核上?,python,python-3.x,windows,multiprocessing,Python,Python 3.x,Windows,Multiprocessing,我正在为windows编程,在我的Python3应用程序中,我使用subprocess Popen运行大约32个应用程序实例 现在让我们假设我有一个32核的CPU,Windows操作系统会以优化的方式自动将实例分布到各个核上吗?或者我需要在Popen中指定任何标志,或者为它指定其他标志吗 基本上,我希望为这32个实例赋予尽可能高的优先级,并希望确保应用程序的这32个实例以最佳方式使用核心,例如,如果我有32个核心,则两个实例都不应放在一个核心中,我只是不知道如何才能做到这一点?我相信解决方案应该

我正在为windows编程,在我的Python3应用程序中,我使用subprocess Popen运行大约32个应用程序实例

现在让我们假设我有一个32核的CPU,Windows操作系统会以优化的方式自动将实例分布到各个核上吗?或者我需要在Popen中指定任何标志,或者为它指定其他标志吗


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

我相信解决方案应该是Python多处理中的Pool()。有关详细信息,请阅读此处的文档

基本上,Pool对象提供了一种方便的方法,可以跨多个输入值并行化函数(在您的例子中,我们称为应用程序)的执行,跨进程分布输入数据(数据并行)

下面是一个示例片段,可用于创建N个并行进程,这些进程将均匀分布到CPU的所有核心

导入日期时间
来自多处理导入池
导入时间
def初始应用程序(x):
时间。睡眠(2)
#在此处启动应用程序,该应用程序将添加到池中进行处理。
打印(datetime.datetime.now())
返回x*x
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
p=Pool()#分配给所有可用的CPU内核
打印(p.map(初始应用程序,范围(10)))
希望这能澄清你的疑问。此外,上面的代码片段是python中Pool()的示例实现。请根据您的要求修改

谢谢,
AG

我相信您的想法的解决方案是Python多处理中的Pool()。有关详细信息,请阅读此处的文档

基本上,Pool对象提供了一种方便的方法,可以跨多个输入值并行化函数(在您的例子中,我们称为应用程序)的执行,跨进程分布输入数据(数据并行)

下面是一个示例片段,可用于创建N个并行进程,这些进程将均匀分布到CPU的所有核心

导入日期时间
来自多处理导入池
导入时间
def初始应用程序(x):
时间。睡眠(2)
#在此处启动应用程序,该应用程序将添加到池中进行处理。
打印(datetime.datetime.now())
返回x*x
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
p=Pool()#分配给所有可用的CPU内核
打印(p.map(初始应用程序,范围(10)))
希望这能澄清你的疑问。此外,上面的代码片段是python中Pool()的示例实现。请根据您的要求修改

谢谢,
AG

Popen创建独立的程序,这些程序将在操作系统认为应该运行的情况下运行。Windows会将它们分布到所有的CPU上,除非您运行在某种限制它的环境中。通常情况下,情况并非如此。@tdelaney因此,在正常环境中,我如何确保windows以优化的方式将它们分布到多个核心上?如何强制windows以最佳方式将这些应用程序分布到多个核心上(例如,它可能会将5个应用程序放在一个核心上,将10个应用程序放在另一个核心上,而不是将每个应用程序放在32个核心中的1个中)基本上,我想给这32个实例以最高优先级,并希望确保这32个应用程序以最佳方式使用内核,例如,如果我有32个内核,那么两个实例都不应该放在一个内核中。您不必担心这一点,因为操作系统将比您可能做的更好地为CPU分配进程。事实上,我不知道有任何操作系统允许从用户空间执行此操作。Windows不会让内核在有工作时处于空闲状态,因此进程自然会分布到所有内核。对于大多数工作负载,默认调度程序是最好的。您可以提高进程优先级,这样您的进程就可以胜过系统上运行的其他进程,您还可以设置处理器关联性以限制代码运行的CPU。有时这有帮助,有时这是一场灾难,所以实验是好的。不幸的是,我不记得如何在Windows上设置它。希望其他人知道。Popen创建了独立的程序,可以运行操作系统认为应该运行的程序。Windows会将它们分布到所有的CPU上,除非您运行在某种限制它的环境中。通常情况下,情况并非如此。@tdelaney因此,在正常环境中,我如何确保windows以优化的方式将它们分布到多个核心上?如何强制windows以最佳方式将这些应用程序分布到多个核心上(例如,它可能会将5个应用程序放在一个核心上,将10个应用程序放在另一个核心上,而不是将每个应用程序放在32个核心中的1个中)基本上,我想给这32个实例以最高优先级,并希望确保这32个应用程序以最佳方式使用内核,例如,如果我有32个内核,那么两个实例都不应该放在一个内核中。您不必担心这一点,因为操作系统将比您可能做的更好地为CPU分配进程。事实上,我不知道有任何操作系统允许从用户空间执行此操作。Windows不会让内核在有工作时处于空闲状态,因此进程自然会分布到所有内核。对于大多数工作负载,默认调度程序是最好的。您可以提高进程优先级,这样您的进程就可以胜过系统上运行的其他进程,您还可以设置处理器关联性以限制代码运行的CPU。有时这有帮助,有时这是一场灾难,所以实验是好的。不幸的是,我不记得h