2014-11-26 2 views
0

Я пытаюсь вычислить использование% cpu на основе быстрой статистики vmware. Проблема в том, что быстрая статистика не предоставляет% cpu для гостя, поэтому я должен найти способ ее расчета. У меня есть хост процессора значение скорости пара магазин в словаре следующим образом:поисковый словарь в python для соответствующего значения

{'host-594': 2194, 'host-10249': 2194, 'host-6484': 2194, 'host-6486': 1861, 'host-6480': 2194, 'host-6482': 2194, 'host-699': 2194, 'host-6364': 1861, 'host-500': 2194, 'host-17424': 2194, 'host-502': 2194, 'host-17426': 2194, 'host-17420': 2194, 'host-17422': 2194, 'host-17428': 2194, 'host-1805': 2665, 'host-4360': 1862, 'host-858': 2194, 'host-1067': 2194, 'host-1065': 2194, 'host-4162': 1861, 'host-1063': 2194, 'host-1061': 2194, 'host-17396': 2194, 'host-3394': 2132, 'host-1069': 2194, 'host-5565': 2132}

Затем

я могу получить Used_CpuMhz, Num_vCpu и host_id (который гость принадлежит) следующим образом:

properties = ["name", 
       "summary.quickStats.overallCpuUsage", 
       "summary.runtime.host", 
       "config.hardware.numCPU"] 
results = s._retrieve_properties_traversal(property_names=properties, obj_type=MORTypes.VirtualMachine) 

for item in results: 
     for r in item.PropSet: 
       if r.Name == "name" : 
       name = r.Val 

     Used_CpuMhz = 0 
     Num_vCpu = 0 
     host_id = none 


     for p in item.PropSet: 

      if p.Name=="summary.quickStats.overallCpuUsage": 
        Used_CpuMhz=p.Val 

      if p.Name=="config.hardware.numCPU": 
        Num_vCpu=p.Val 

      if p.Name=="summary.runtime.host": 
        host_id=p.Val 
      #here I have to read myDict() where I need get the value pair 
      #for host_id in myDict. I need to scan myDict and if I see host_id 
      #in there, I need to assign the value to speed variable in here 
        %CPU= Used_CpuMhz/(Num_vCpu*speed) 

Данное значение: {host-594': 2194}, если host_id в выражении if - «host-594», скорость должна быть 2194. Поэтому для каждого гостя мне нужно сканировать myDict и найти скорость процессора соответствующего хоста. Может ли кто-нибудь дать представление о том, как это сделать?

Я изменил код, как показано ниже:

if p.Name=="summary.quickStats.overallCpuUsage": 
        Used_CpuMhz=p.Val 

if p.Name=="config.hardware.numCPU": 
        Num_vCpu=p.Val 
if p.Name=="summary.runtime.host": 
        host_id=p.Val 
        if host_id in myDict: 
         cpu_speed = myDict[host_id] 

if Used_CpuMhz >0 and Num_vCpu >0: 
        Percent_Cpu_Used=(float(Used_CpuMhz)/(float(Num_vCpu)*float(cpu_speed)))*100 

Я получаю эту ошибку:

Traceback (most recent call last): 
    File "host.py", line 138, in <module> 
    Percent_Cpu_Used=(float(Used_CpuMhz)/(float(Num_vCpu)*float(cpu_speed)))*100 
ZeroDivisionError: float division 
+0

RTFM [типов отображения] (https://docs.python.org/2/library/stdtypes.html?highlight=dict#mapping-types-dict) в операциях 'dict'. –

ответ

1
if host_id in myDict: 
    speed = myDict[host_id] 

Эквивалентный способ сделать это:

if host_id in myDict.keys(): 
    speed = myDict[host_id] 
+0

спасибо за ответ. Я должен инициализировать host_id перед циклом, я пробовал host_id = никто не работал, никаких идей? – user1471980

+0

Что значит «не работает»? Какое поведение вы хотите, если ходьбе нет в dict? – gcarvelli

+0

@ user1471980 попробуйте этот 'host_id = None' или' host_id = '' ' – Hackaholic

1

Если вы хотите указать значение по умолчанию для использования, если хост i sn't найдено в словаре:

speed = myDict.get(host_id, 12345) # Default of 12345 

Конечно, если вы ожидаете всех хостов быть в словаре, то просто посмотрите его:

speed = myDict[host_id] 
Смежные вопросы