Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 21, 2015 08:20:05

apanyovin
От:
Зарегистрирован: 2008-12-25
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

txredisapi Вопрос по примеру с подпиской

Привет всем!
подскажите, как отправить запрос 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



Офлайн

#2 Июнь 21, 2015 08:44:38

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

txredisapi Вопрос по примеру с подпиской

А почему не обычный 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')

Офлайн

#3 Июнь 21, 2015 09:43:27

apanyovin
От:
Зарегистрирован: 2008-12-25
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

txredisapi Вопрос по примеру с подпиской

Дальше я планировал использовать ESL
Он на твистеде, ну и так сказать заодно с txredisapi.


В целом вариант вполне нормальны, но хотелось бы с txredisapi



Офлайн

#4 Июнь 21, 2015 12:34:31

apanyovin
От:
Зарегистрирован: 2008-12-25
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

txredisapi Вопрос по примеру с подпиской

ayb подскажите как будет выглядеть реконнект в случае потери соединения?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version