Форум сайта python.su
0
Привет всем!
подскажите, как отправить запрос get к редису при получении сообщения в определенном канале.
import txredisapi as redis class RedisListenerProtocol(redis.SubscriberProtocol): def connectionMade(self): self.subscribe("channelName") def messageReceived(self, pattern, channel, message): print "pattern=%s, channel=%s message=%s" %(pattern, channel, message) if channel == "a": XXXXX? def connectionLost(self, reason): print "lost connection:", reason class RedisListenerFactory(redis.SubscriberFactory): maxDelay = 120 continueTrying = True protocol = RedisListenerProtocol
Офлайн
24
А почему не обычный redis-py ? Вот пример на redis-py :
import redis import threading class Listener(threading.Thread): def __init__(self, r, channels): threading.Thread.__init__(self) self.redis = r self.pubsub = self.redis.pubsub() self.pubsub.subscribe(channels) def work(self, item): if item['channel'] == 'channel_you_need': self.redis.get('your_request') print item['channel'], ":", item['data'] def run(self): for item in self.pubsub.listen(): if item['data'] == "KILL": self.pubsub.unsubscribe() print self, "unsubscribed and finished" break else: self.work(item) if __name__ == "__main__": r = redis.Redis() client = Listener(r, ['test']) client.start() r.publish('test', 'this will reach the listener') r.publish('fail', 'this will not') r.publish('test', 'KILL')
Офлайн
0
Дальше я планировал использовать ESL
Он на твистеде, ну и так сказать заодно с txredisapi.
В целом вариант вполне нормальны, но хотелось бы с txredisapi
Офлайн
0
ayb подскажите как будет выглядеть реконнект в случае потери соединения?
Офлайн