我的代码总是打印"已完成"并且不要退出while循环

时间:2015-06-04 16:16:43

标签: python

我有一个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"

1 个答案:

答案 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':