【转】python 绑定进程在某个cpu上执行 affinity

本文探讨了在多核CPU环境下,如何利用Python的affinity库有效分配进程至特定CPU核心,以提升程序运行效率。并通过示例展示了如何绑定进程到指定CPU,以及在新Linux主机上可能遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

multiprocessing 进程在多cpu机器上的利用率.然后写了个脚本在i5(4核),起了4个进程,发现只有一颗cpu跑的比较高,然后觉得不是很舒服. 

指定某个cpu去执行一个进程,python有个第三方的库http://pypi.python.org/pypi/affinity/0.1.0,基本都是调用了系统的affinity mask的API. 

在windows上装了试了下,貌似还真有点用. 

看了下代码,一共也就3个方法,用起来很方便. 
_get_handle_for_pid(pid, ro=True) 
通过一个pid获取进程 
get_process_affinity_mask(pid) 
通过pid获取这个进程当前的affinity mask相关掩码 ,返回一个长整形('2l',就是在用2这个cpu) 
set_process_affinity_mask(pid, value) 
绑定pid这个进程到value所指的这个cpu上去(set_process_affinity_mask(3516, 1),就是用1这个cpu去执行pid为3516这个进程) 

需要安装依赖包:affinity 

>>>import multiprocessing, time, signal
>>>import affinity
#我用multiprocessing创建了个进程
>>>p = multiprocessing.Process(target=time.sleep, args=(1000,))
>>>p.start()
>>>pid=p.pid
>>>print pid

#先看了下5604这个进程用的是那个cpu
>>>affinity.get_process_affinity_mask(pid)
3L
#将5604这个进程用2这个cpu跑
>>>affinity.set_process_affinity_mask(pid, 2L)
3L
>>>affinity.get_process_affinity_mask(pid)
2L

 

作者新增提示:

该方法由于库长期没有更新,对新的linux主机可能不生效,可直接使用linux命令完成

#绑定0号CPU
try:
os.system("taskset -pc 0 %s"%pid)
except Exception:
pass

 

转自 https://www.cnblogs.com/domestique/p/7718510.html

转载于:https://www.cnblogs.com/chmyee/p/9318031.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值