我有一个mapreducejob,我定义了一个jobid:
jobid = emr.run_jobflow(name="Data Processing"
在mapreduce工作之后,我想要显示一条消息"已完成的工作" mapreduce job status == "COMPLETED"
。
我尝试使用下面的代码执行此操作,但我总是处于以下状态:
STARTING 开始 .... RUNNING ... 已完成 已完成 已完成 已完成
问题在于它总是打印"已完成"并且不要退出while循环。我想退出,以便显示消息"已完成的工作"。
你知道问题在哪里吗?
status = emr.describe_jobflow(jobid)
while status.state != 'COMPLETED' or status.state != 'FAILED':
status = emr.describe_jobflow(jobid)
print status.state
print "Job status:" + str(status.state)
print ""
print "Completed Job"
答案 0 :(得分:4)
while status.state != 'COMPLETED' or status.state != 'FAILED':
此行始终评估为True。当状态为" COMPLETED"时,它的结果为False or True
,即为True。当状态为" FAILED"时,它评估为True or False
,即为True。当state是其他任何东西时,它的计算结果为True or True
,这是真的。所以你的循环会无限延续。
相当于"直到A或B"不是A而不是B"它不是A而不是B"而不是A而不是B"有关详细信息,请参阅De Morgan's laws。
将or
替换为and
。
while status.state != 'COMPLETED' and status.state != 'FAILED':