2017-01-16 36 views
-3

いつでも、私のコードの外から徹底的に更新するシグナルが変わってくると私は自分のコードを第三者のアプリケーションにしたいと言います。非同期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ループ、私のプログラムの第三秒で動作するメインコードを持っている場合:それはすぐにたとえば100を停止する0の間で変化することを言うことができます。だから私はこのループをすぐに私の変数が50以上の場合は、 "メッセージ3"を停止して印刷したいと思います。どうすればいいですか?このメッセージでは、20秒後に「メッセージ3」しか表示されませんが、ルーチンを中断したいと思います。

私は、サードパーティのアプリケーションから徹底的に更新する変数を持っていると言います。それは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

はいしかし、どのように私はすぐに終了することができます

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!") 

は、アウトプット何らかの外部割り込みが発生したときにループしますか?メソッドを除いてみてください。私は外部割り込みについて別の方法があると思います。 –

+1

@MustafaGökçeどのような「外部割り込み」を考えていますか?あなたはあなたが提示したコードについて具体的に質問し、それが答えられました。 **あなたが何を言っているのかを正確に**説明するためにあなたの投稿を編集してください。 「KeyboardInterrupt」は、例えば、サーバによって受信されるメッセージとは非常に異なる。 – MattDMo

答えて

1

CTRL-Cを押すとすぐにmessage threeが表示されますが、停止する場合はbreakを追加してwhileループを終了してください。

except KeyboardInterrupt: 
    print("message three") 
    break 

あなたはwhile外の試みを追加した場合、あなたも休憩を必要としません。 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ちょうどブレイクの代わりにexit()を入れてください – Robert

+0

@MustafaGökçe私の答えを例で編集しました。あなたのコメントから、ループがすぐに終了するとは思わないので、例でタイムスタンプを追加しました。 –