python 指定cpu运行_python 绑定进程在某个cpu上执行-affinity

[转载:http://blog.csdn.net/swiftshow/article/details/8109322 import psutil,timedef getProcessInfo(p): 取出指定进程占用的进程名,进程ID,进程实际内存, 虚拟

因为最近在看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这个进程)[1. 从Python GIL系列文章中我们已经对Python的GIL有了一个比较清醒的认识2. 要提高Python程序在多核CPU情况下的性能,除了使用进程替代线程外,一个更为实用的方法就是绑

>>>import multiprocessing, time, signal

>>>import affinity

#我用multiprocessing创建了个进程

>>>p = multiprocessing.Process(target=time.sleep, args=(1000,))

>>>p.start()

>>>pid=p.pid

>>>print pid

5604

#先看了下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上多进程和多线程系统内核调度的还是很平均的所以一般不会用到这些,只是今天好奇就看了下. [如何指定进程运行的CPU coolshell最新的文章《性能调优攻略》在“多核CPU调优”章节,提到“我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可

你可能感兴趣的:(python,指定cpu运行)