2017-04-10 8 views
1

私はpythonでいくつかのサーバーコードを書くプロセスで、現在だと私は、IEの要求にサービスを提供するために、無限ループを開始する方法があります:方法にブレーク/ストップ信号を送ることは可能ですか?

class s: 
    def serve(self): 
     while True: 
      # do stuff 

私はこのコードを呼び出すと、私はのようなものを実行します。

a = s() 
a.serve() 

私の質問は、メソッドの外側からループを中断させるために 'serve'にメッセージを送信する方法ですか?私は単にプログラムを殺すのではありません。大いに感謝します。私が考えてきた

1つのオプションはなく、次のとおりです。

while True: 
    // do something 

は行うことができます:

while self.serving: # and then update self.serving as appropriate 

しかし、よりよい解決策は、おそらくあります。

答えて

1

はい、これは可能です:

class Server: 

    def __init__(): 
     self.alive = True 

    def serve(self): 
     while self.alive: 
      # do stuff 

    def die(): 
     self.alive = False 

は今だけserve(..)を実行中のスレッドの外die()を呼び出します。

srv = Server() 
thread = Thread(target=srv.serve) 
thread.start() 
time.sleep(some_time) # or do something else. 
srv.die() # or do this from some outside process. 
+0

これは私の考えであり、それが最も理にかなっています。ありがとう! – DarkPurple141

0

私はあなたが何をしようとしているが、あなたはではなく、単純な旗を持っている可能性がまさに理解していない:それは

example = True 
while example: 

が続いたときにfalseに例を設定することができ

while True: 

ループを終了します。

+0

明確にする;メソッドの外部からメソッドにシグナルを送りたい。したがって、s.stop()はs.start()のループブレイクを行う必要があります。しかし、潜在的にええ、オブジェクトアクセシブルなパラメターは行く方法です。 – DarkPurple141

関連する問題