嗨,我是一個非常新的 python 程式員,我遇到了配額查詢代碼的問題。
def get_metric_statistics(instance_args):
CMD = (**querying the quota***)
print (CMD)
output = run_command_str(command=CMD, shell_command=True)
applied_quota_value = json.loads(output)
max_quota_metric = applied_quota_value ['Quota']['Value']
print ("max_quota:", max_quota_metric)
CMD1 = (***querying metric**)
print (CMD1)
output1 = run_command_str(command=CMD1, shell_command=True)
print ("output:", output1)
utilized_quota_value = json.loads(output1)
used_quota_metric = utilized_quota_value ['Datapoints'][0]['Maximum']
print ("used:", used_quota_metric)
available_quota = max_quota_metric - used_quota_metric
instance_args["no_of_vcpu"] = some value
while available_quota < instance_args["no_of_vcpu"]:
print ("Waiting for vcpu to be available")
time.sleep(30)
else:
print ("available quota is greater than requested vcpu, continues to launch the instance")
aws_metric_data = get_metric_statistics(instance_args)
print(aws_metric_data)
所以這里我試圖檢查條件并列印后續陳述句,但是當條件中的值的變數進入回圈時,它會檢查條件是否為真,即使在變數已被更新后,真條件仍在回圈不同的價值。條件中的變數基本上沒有更新。不知道如何獲取在回圈內進行更新的那段代碼。
uj5u.com熱心網友回復:
在您的代碼中:
while available_quota < instance_args["no_of_vcpu"]:
print ("Waiting for vcpu to be available")
time.sleep(30)
else:
print ("available quota is greater than requested vcpu, continues to launch the instance")
使用兩個值進入 while 回圈,這兩個值進行比較。但由于回圈中的值沒有更新,while 回圈將永遠存在。您還需要使用最初用于計算值的代碼不斷檢查回圈中的值。
像這樣的東西:
while available_quota < instance_args["no_of_vcpu"]:
print ("Waiting for vcpu to be available")
time.sleep(30)
output1 = run_command_str(command=CMD1, shell_command=True)
print ("output:", output1)
utilized_quota_value = json.loads(output1)
used_quota_metric = utilized_quota_value ['Datapoints'][0]['Maximum']
print ("used:", used_quota_metric)
available_quota = max_quota_metric - used_quota_metric
instance_args["no_of_vcpu"] = some value
else:
print ("available quota is greater than requested vcpu, continues to launch the instance")
雖然由于附加部分是一個獨立的作業組件,但我可能會將它放入一個函式中。
def getStatus():
output1 = run_command_str(command=CMD1, shell_command=True)
print ("output:", output1)
utilized_quota_value = json.loads(output1)
used_quota_metric = utilized_quota_value ['Datapoints'][0]['Maximum']
print ("used:", used_quota_metric)
available_quota = max_quota_metric - used_quota_metric
instance_args["no_of_vcpu"] = some value
return available_quota, instance_args["no_of_vcpu"]
然后:
while available_quota < instance_args["no_of_vcpu"]:
print ("Waiting for vcpu to be available")
time.sleep(30)
available_quota,instance_args["no_of_vcpu"]=getStatus()
else:
print ("available quota is greater than requested vcpu, continues to launch the instance")
uj5u.com熱心網友回復:
該變數未在 while 回圈中更新。我已將您的計算轉移到一個單獨的函式中。當 while 回圈在睡眠后運行時,將重新計算可用配額
def calc_available_quota():
CMD = (**querying the quota***)
print (CMD)
output = run_command_str(command=CMD, shell_command=True)
applied_quota_value = json.loads(output)
max_quota_metric = applied_quota_value ['Quota']['Value']
print ("max_quota:", max_quota_metric)
CMD1 = (***querying metric**)
print (CMD1)
output1 = run_command_str(command=CMD1, shell_command=True)
print ("output:", output1)
utilized_quota_value = json.loads(output1)
used_quota_metric = utilized_quota_value ['Datapoints'][0]['Maximum']
print ("used:", used_quota_metric)
return max_quota_metric - used_quota_metric
def get_metric_statistics(instance_args):
instance_args["no_of_vcpu"] = some_value
available_quota = calc_available_quota()
while available_quota < instance_args["no_of_vcpu"]:
print ("Waiting for vcpu to be available")
time.sleep(30)
available_quota = calc_available_quota()
else:
print ("available quota is greater than requested vcpu, continues to launch the instance")
aws_metric_data = get_metric_statistics(instance_args)
print(aws_metric_data)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/405027.html
標籤:
上一篇:如何通知AWS死信佇列?
