2
import redis
import threading

class Listener(threading.Thread):
    def __init__(self, r, channel):
        threading.Thread.__init__(self)
        self.redis = r
        self.pubsub = self.redis.pubsub()
        self.pubsub.subscribe(channel)

def run(self):
    for item in self.pubsub.listen():
        # do stuff
        pass

上記のコードで、スレッドを停止するにはどうすればよいですか?

以下に、私が望むものを示すサンプルコードを示します。

class Listener(threading.Thread):
    def __init__(self, r, channel):
        threading.Thread.__init__(self)
         self.redis = r
         self.pubsub = self.redis.pubsub()
         self.pubsub.subscribe(channel)
         self.stop = False

    def run(self):
        while not stop:
            # get item from channel

したがって、属性 stop == True の場合、スレッドはループを終了して終了します。それは可能ですか?そうでない場合、代替手段は何ですか?

4

1 に答える 1

3

ループを中断してサブスクライブを解除するコマンドを渡す方法を示す便利な要点があります。これは、他の方法でそれを行う方法を確認するのに役立つ場合があります。

for item in self.pubsub.listen():
    if item['data'] == "KILL":
        self.pubsub.unsubscribe()
        print self, "unsubscribed and finished"
        break
    else:
        self.work(item)

ここでサンプルコードを見ることができます:

于 2014-01-08T23:32:18.873 に答える