Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 1, 2015 22:24:48

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

tornadoredis

Добрый день, возник вопрос по работе с БД redis, в частотности с подпиской.

Использую python 3.4.0 и либу tornadoredis.

def show_message(mes):
    print(mes)
client_redis = tornadoredis.Client()
client_redis.connect()
client_redis.subscribe('test_sub')
client_redis.listen(show_message)

Соединение с БД проходит успешно, дальше например делаем публикацию на данную подписку:
import redis
r = redis.Redis()
r.publish('test_sub', '12345')

Должна вызываться функция show_message, но в ответ тишина…
если делать подписку через клиент redis (redis-cli), то там на публикацию отклик уже есть…
Находил примеры с либой brukva, но под 3-ий python она не идет…

Отредактировано hound (Янв. 1, 2015 22:25:14)

Офлайн

#2 Янв. 2, 2015 17:57:22

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

tornadoredis

В общем, не до конца вкурил маны…
если кому интересно:

# Use the synchronous redis client to publish messages to a channel
redis_client = redis.Redis()
# Create the tornadoredis.Client instance
# and use it for redis channel subscriptions
subscriber = tornadoredis.pubsub.SockJSSubscriber(tornadoredis.Client())
class SubscriptionHandler(sockjs.tornado.SockJSConnection):
    """
    SockJS connection handler.
    Note that there are no "on message" handlers - SockJSSubscriber class
    calls SockJSConnection.broadcast method to transfer messages
    to subscribed clients.
    """
    def __init__(self, *args, **kwargs):
        super(MessageHandler, self).__init__(*args, **kwargs)
        subscriber.subscribe('test_channel', self)
    def on_close(self):
        subscriber.unsubscribe('test_channel', self)

Ну и пример, конечно, для варианта с использованием SockJS

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version