2015-06-04 19 views
0

我有一個mapreducejob,我定義了一個作業ID:我的代碼總是打印「已完成」和不退出while循環

jobid = emr.run_jobflow(name="Data Processing" 

MapReduce工作後,我想顯示消息「完成作業」的時候MapReduce工作status == "COMPLETED"

我試着用下面的代碼來做到這一點,但有總是像林的狀態:

STARTING STARTING .... RUNNING 已完成竣工 竣工 ... 竣工

問題是它總是打印「COMPLETED」並且不退出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" 

回答

4
while status.state != 'COMPLETED' or status.state != 'FAILED': 

該行始終計算爲真。狀態爲「COMPLETED」時,它的計算結果爲False or True,這是True。當狀態爲「失敗」時,其評估爲True or False,其爲真。當狀態是別的,它的計算結果爲True or True,這是真的。所以你的循環繼續無限。

「等到A或B」不等於「雖然不是A或不是B」,但它是「雖然不是A而不是B」。詳情請參閱De Morgan's laws

or替換爲and

while status.state != 'COMPLETED' and status.state != 'FAILED':