[英]Get number of busy CPUs in Python
我正在編寫一個multiprocessing
例程,在具有大量CPU的服務器上運行。 但是,服務器有多個用戶,其用途可能會有所不同。 所以我想根據當前負載調整使用的處理器數量。
multiprocessing.cpu_count()
multiprocessing.Pool(processes=no_cpus)
? 有許多並發症......
進程(和線程)由Linux內核在任何CPU上進行調度。 即使確定“當前CPU”也很尷尬 - 請參閱如何查看線程正在運行的CPU內核?
multiprocessing.Pool
旨在啟動“永遠”運行的N個工作人員。 每個人都接受隊列中的任務,做一些工作,然后輸出數據。 Pool
不會改變大小。 兩個建議:
19:05:07 up 4 days, 20:43, 3 users, load average:
0.99 , 1.01, 0.82
最后三個數字是最后一分鍾,五分鍾和15分鍾的“平均負載”。 考慮使用第一個數字來對應用程序進行負載平衡。
time.sleep(factor)
。 因此,您可以在系統繁忙時(高負載平均值)增加因子,並在系統空閑時(低負載;即沖浪)使延遲更短。 游泳池的大小相同。
我遵循了johntellsall的解決方案,這是一些實際的簡單原理圖。 有一個,因為Python(對我來說)將虛擬與實際的cpu混淆。 我決定校准過去15分鍾的平均負荷。
睡覺的數字很隨意。
def sleepForMultiCore():
# divide by 2 since Python does not distinguish physical and virtual core
cores = 0.5*mp.cpu_count()
loadAvg = os.getloadavg()[2]
if loadAvg > cores*1.3:
sleepTime = 5*60
elif loadAvg > cores:
sleepTime = 2*60
elif loadAvg > cores*0.9:
sleepTime = 1*60
else:
sleepTime = 0
print ('sleeping for ', sleepTime)
time.sleep(sleepTime)
我認為你的問題最好的庫是psutil ,你可以在一些不同的操作系統中管理一些CPU和內存使用':
psutil是一個模塊,提供了一個接口,用於通過使用Python以可移植的方式檢索有關正在運行的進程和系統利用率(CPU,內存)的信息,實現ps,top和Windows任務管理器等工具提供的許多功能。
它目前支持Linux,OS X,FreeBSD和Windows,使用2.4到3.1的Python版本,使用獨特的代碼庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.