假设您的计算机上有4个物理核心,并且假设没有超线程且python版本为3.2+(尽管我不确定这些额外信息是否对我的问题很重要)。
如果我要打开一个由3个子进程组成的池,那么每个子进程在执行一些CPU绑定的任务时都占用一个物理核心,并且如果我要从当前进程(在OS中占用4个剩余的一个核心)中打开3个线程正在运行,并且如果我要将CPU绑定的任务向下发送到3个子进程中的每个子进程,那么问题是这样的:
从当前正在管理线程的进程的角度来看(这些线程正在将任务推送到每个子进程,并正在等待结果从这些子进程返回),这些CPU绑定的任务是否可以视为I / O绑定的任务(从当前流程的角度来看)由于当前流程实际上没有做任何工作?同样,这3个线程是否会进入睡眠状态,而3个子进程正在紧缩数字并占用3个核心,而让最后一个核心空闲呢?
是。我无法想象还会发生什么,您是否还有其他可能性?如您所说,线程正在等待。
在这种情况下,您可能可以使4个进程处理CPU绑定的任务。
It sounds like your problem is well suited for
multiprocessing.Pool
. In that case note that if you don't specify the number of processes to use, it uses the number of CPU cores by default:这是一个正式信号,表明使用与内核一样多的进程是一种正常做法。