開始還不知道就在晚上找是不是有什麼方法可以指定某個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這個進程)
- >>>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上多進程和多線程系統內核調度的還是很平均的所以一般不會用到這些,只是今天好奇就看了下.