2017-01-16 33 views
-3

每當我們說我有一個信號變量,從我的代碼之外不斷更新,我想我的代碼第三方應用程序。比方說,它0之間變化,立即停止100例如:異步Python

import time 
while True: 
    try: 
     print("message one") 
     time.sleep(10) 
     print("message two") 
     time.sleep(10) 
    except KeyboardInterrupt: 
     print("message three") 

當我按下Ctrl + C,我已經在我的節目的第三次第二工作的主要代碼,我一個循環也continiously。所以我想這個循環立即打印「消息三」停止當我的變量超過,可以說,50.我怎麼能做到這一點?在此消息中,它僅在20秒後打印「消息三」,但我想中斷程序。

比方說,我有一個變量,從第三方應用程序不斷更新。可以說它在0到100之間變化。我還有一個主要的代碼在循環中也在不斷地運行。所以我想這個循環立即停止,當我的變量超過,可以說,50.我該怎麼辦?

編輯:

其實我想做的事是這樣的:

import time 

while True: 
    dothisfunction() 
    time.sleep(10) 
    doanotherfunction() 
    time.sleep(10) 
    alsodoit() 
    time.sleep(10) 
    andalsodoit() 
    time.sleep(10) 

可以說這是我的主要腳本。我想用KeyboardInterrupt來中斷這個腳本,只要我想要,不要結束循環。

+1

它不僅缺乏退出()或提高或突破裏面除了塊 – Robert

+0

是的,但我如何能立即退出當某種外部中斷到來時循環?嘗試除了方法只是一個例子。我認爲還有另一種關於外部中斷的方式。 –

+1

@MustafaGökçe你在想什麼樣的「外部中斷」?您特別詢問了您提供的代碼,並得到了答覆。請[編輯]你的帖子來解釋**完全**你在說什麼,因爲解決方案可能會有所不同,這取決於你的意思。例如,「KeyboardInterrupt」與服務器收到的消息非常不同。 – MattDMo

回答

1

當CTRL-C被按下時,它應該立即打印message three,但是如果你希望它停止,可以添加一個break離開while循環。

except KeyboardInterrupt: 
    print("message three") 
    break 

如果添加while外的嘗試,你甚至都不需要休息。 CTRL-C將立即退出循環。

下面是秒時間戳的例子:

import time 
try: 
    while True: 
     print(time.time(),"message one") 
     time.sleep(5) 
     print(time.time(),"message two") 
     time.sleep(5) 
     print(time.time(),"message three") 
     time.sleep(5) 
     print(time.time(),"message four") 
     time.sleep(5) 
except KeyboardInterrupt: 
    print(time.time(),"CTRL-C!") 

輸出:

1484687761.801528 message one 
1484687766.80314 message two   # 5 seconds later. 
1484687767.26655 CTRL-C!    # .4 seconds later...didn't finish loop 
+0

是的,但是當某種外部中斷來臨時,我該如何立即退出循環?嘗試除了方法只是一個例子。我認爲還有另一種關於外部中斷的方式。 –

+0

@MustafaGökçe只是把退出()而不是休息 – Robert

+0

@MustafaGökçe編輯我的答案與一個例子。從你的評論你認爲循環不立即退出,所以我在一個例子中添加時間戳。 –