使用多处理池时,工作进程的数量应该与CPU的数量相同吗?

时间:2017-01-06 03:53:15

标签: python multiprocessing cpu cpu-cores

使用Python多处理池时,工作进程的数量应该与CPU的数量相同吗?

本文http://www.howtogeek.com/194756/cpu-basics-multiple-cpus-cores-and-hyper-threading-explained/表示每个核心实际上都是CPU芯片上的中央处理单元。因此,似乎不存在具有1个进程/核心的问题

e.g。如果我有一个带有4个内核的单个CPU芯片,则可以运行1个进程/内核,总共可以运行4个进程而不会降低性能。

2 个答案:

答案 0 :(得分:2)

根据我对python和多处理的了解,最好的行动方案是...

  • 每个核心一个进程,但跳过逻辑进程。

超线程对python没有帮助。在许多情况下,它实际上会损害性能,但当然首先要自己测试一下。

  • 使用affinity(pip install affinity)模块将每个进程粘贴到特定核心。

至少在使用32位python的Windows上进行了大量测试,不这样做会因为缓存不断丢失而显着损害性能。再次:跳过逻辑核心!逻辑上的,假设你有超线程的英特尔CPU,是1,3,5,7等。

比真实核心更多的线程对你没有任何帮助,除非发生了IO,如果你正在处理数字,它就不应该这样做。自己测试我的声明,特别是如果你使用Linux,因为我根本没有在Linux上测试。

答案 1 :(得分:1)

这实际上取决于您的工作量。逐个案例,最好的方法是运行一些基准测试,看看结果是什么。

调度进程是一项昂贵的操作,运行的进程越多,您需要更改上下文。

如果您的大多数进程没有运行(例如,他们正在等待IO),那么过度使用可能会证明是有益的。相反,如果你的进程大多数时间都在运行,那么添加更多的进程会对你的CPU产生不利影响。