python 綁定進程在某個cpu上執行 affinity

因爲最近在看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這個進程) 
Python代碼  收藏代碼
  1. >>>import multiprocessing, time, signal  
  2. >>>import affinity  
  3. #我用multiprocessing創建了個進程  
  4. >>>p = multiprocessing.Process(target=time.sleep, args=(1000,))  
  5. >>>p.start()  
  6. >>>pid=p.pid  
  7. >>>print pid  
  8. 5604  
  9. #先看了下5604這個進程用的是那個cpu  
  10. >>>affinity.get_process_affinity_mask(pid)  
  11. 3L  
  12. #將5604這個進程用2這個cpu跑  
  13. >>>affinity.set_process_affinity_mask(pid, 2L)  
  14. 3L  
  15. >>>affinity.get_process_affinity_mask(pid)  
  16. 2L  


還有就是我發現在linux上多進程和多線程系統內核調度的還是很平均的所以一般不會用到這些,只是今天好奇就看了下. 
發佈了0 篇原創文章 · 獲贊 0 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章