为进程指定特定的CPU-python多处理

为进程指定特定的CPU-python多处理,python,multiprocessing,cpu,Python,Multiprocessing,Cpu,我使用Redis作为多处理设置中生产者/消费者关系的队列 我的问题是,我的生产者让我的消费者超载,然后偷走了它的CPU 我的问题是,在此设置中,我是否可以将整个处理器分配给特定的功能/进程(即:消费者) 这不是Python现成的功能。也有点特定于操作系统。在Linux下运行时可以看到这个答案:我在项目中遇到了类似的问题,3台服务器/调度程序在各自的CPU核心上运行,产生了CPU密集型的工作人员——同时,这些工作人员被设计为使用他们正在运行的特定核心,以最大限度地发挥其潜力 我需要确保这样的工作进

我使用Redis作为多处理设置中生产者/消费者关系的队列

我的问题是,我的生产者让我的消费者超载,然后偷走了它的CPU


我的问题是,在此设置中,我是否可以将整个处理器分配给特定的功能/进程(即:消费者)

这不是Python现成的功能。也有点特定于操作系统。在Linux下运行时可以看到这个答案:

我在项目中遇到了类似的问题,3台服务器/调度程序在各自的CPU核心上运行,产生了CPU密集型的工作人员——同时,这些工作人员被设计为使用他们正在运行的特定核心,以最大限度地发挥其潜力

我需要确保这样的工作进程永远不会在运行服务器/调度器的CPU核心上产生(或使用——因为一些工作进程也使用了多处理),因为这会导致后者的操作出现问题

我使用了answer中的以下代码,它非常适合将任何进程限制到任何核心。在本例中,我使用了多处理池,但是来自
的代码可以在任何
多处理.Process
中使用。注意:它在macOS上不起作用

将多处理导入为mp
def子级(工作线程:int)->无:
导入psutil
导入时间
p=psutil.Process()
打印(f“Child{worker}:{p},affinity{p.cpu\u affinity()}”,flush=True)
时间。睡眠(1)
p、 cpu_关联([工作进程])
打印(f“Child#{worker}:将我的关联设置为{worker},关联现在为{p.cpu_affinity()}”,flush=True)
时间。睡眠(1+3*工人)
打印(f“Child#{worker}:现在在{p.CPU_affinity()}上启动CPU密集型任务4秒…”,flush=True)
t_end=time.perf_计数器()+4
while time.perf_counter()无:
使用mp.Pool()作为池:
#无检查PyProtectedMember
workers:int=pool.\u进程
打印(f“使用{workers}个workers运行池”)
对于范围内的i(工人):
pool.apply\u async(子级,(i,))
#等待孩子们学习芬兰语
pool.close()
pool.join()
通过
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
控制台中的输出:

运行有16名工作人员的池
Child#0:psutil.Process(pid=16168,name='python.exe',start='23:03:09'),affinity[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#1:psutil.Process(pid=20864,name='python.exe',start='23:03:09'),关联[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#2:psutil.Process(pid=15748,name='python.exe',start='23:03:09'),关联[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#4:psutil.Process(pid=20600,name='python.exe',start='23:03:09'),关联[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#3:psutil.Process(pid=17900,name='python.exe',start='23:03:09'),affinity[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#5:psutil.Process(pid=3288,name='python.exe',start='23:03:09'),关联[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#7:psutil.Process(pid=19308,name='python.exe',start='23:03:09'),affinity[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#6:psutil.Process(pid=9768,name='python.exe',start='23:03:09'),关联[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#8:psutil.Process(pid=1988,name='python.exe',start='23:03:09'),affinity[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#9:psutil.Process(pid=13960,name='python.exe',start='23:03:09'),关联[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#11:psutil.Process(pid=3068,name='python.exe',start='23:03:09'),affinity[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#10:psutil.Process(pid=9636,name='python.exe',start='23:03:09'),关联[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#12:psutil.Process(pid=18608,name='python.exe',start='23:03:09'),affinity[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#13:psutil.Process(pid=14356,name='python.exe',start='23:03:09'),affinity[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#14:psutil.Process(pid=14636,name='python.exe',start='23:03:09'),关联[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#15:psutil.Process(pid=17372,name='python.exe',start='23:03:09'),关联[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Child#0:将我的关联设置为0,立即关联[0]
孩子#1:将我的亲缘关系设置为1,亲缘关系现在[1]
孩子#2:将我的亲和力设置为2,亲和力现在[2]
Child#4:将我的亲缘关系设置为4,亲缘关系现在[4]
孩子#3:将我的亲和力设置为3,亲和力现在[3]
Child#5:将我的亲和力设置为5,亲和力现在[5]
孩子#7:将我的亲和力设置为7,亲和力现在[7]
孩子#6:将我的亲和力设置为6,亲和力现在[6]
孩子#8:将我的亲和力设置为8,亲和力现在[8]
孩子#9:将我的亲和力设置为9,亲和力现在[9]
孩子#10:将我的亲和力设置为10,亲和力现在[10]
孩子#11:将我的亲和力设置为11,亲和力现在[11]
孩子#12:将我的亲和力设置为12,亲和力现在[12]
孩子#13:将我的亲和力设置为13,亲和力现在[13]
孩子#14:将我的亲和力设置为14,亲和力现在[14]
孩子#15:将我的亲和力设置为15,亲和力现在[15]
子#0:现在在[0]上启动CPU密集型任务4秒。。。
Child#1:现在在[1]上启动CPU密集型任务4秒。。。
子#0:已在[0]上完成CPU密集型任务
孩子2:现在在[2]上启动CPU密集型任务4秒。。。
子#1:已在[1]上完成CPU密集型任务
孩子#3:现在在[3]上启动CPU密集型任务4秒。。。
子#2:已在[2]上完成CPU密集型任务
Child#4:现在在[4]上启动CPU密集型任务4秒。。。
子#3:已在[3]上完成CPU密集型任务
儿童#5:启动CPU密集型任务