Восстановление из сброшенного соединения в Redis Pub/ Sub

Я использую клиент, который подключается к Redis DB. Клиент подключен к сети WiFi и время от времени прерывает соединение. К сожалению, когда это происходит, программа просто продолжает работать без каких-либо предупреждений.

r = redis.StrictRedis(host=XX, password=YY...)
ps = r.pubsub()
ps.subscribe("12345")
for items in ps.listen():
    if items['type'] == 'message':
       data = items['data']

В идеале то, что я ищу, - это перехватить событие, когда соединение потеряно, попытаться восстановить соединение, исправить ошибки, а затем восстановить и запустить все заново. Это должно быть сделано в программе Python? Должен ли я иметь внешний сторожевой таймер?

1 ответ

К сожалению, нужно "пинговать" Redis, чтобы проверить, доступен ли он. Если вы попытаетесь поместить значение в хранилище Redis, оно вызовет ConnectionError исключение, если соединение потеряно. Но генератор listen() не закроется автоматически при потере соединения.

Я думаю, что взлом пула соединений Redis может помочь, попробуйте.

PS In очень небезопасно для подключения к Redis в ненадежной сетевой среде.

Это старый, старый вопрос, но я связал с ним один из своих вопросов и случайно наткнулся на него снова. Оказалось, что в библиотеке redis есть ошибка, из-за которой клиент заходит в бесконечный цикл, пытаясь восстановить соединение, если он потерял соединение с сервером redis. Я отладил проблему и сообщил об изменении. он был объединен давным-давно. После того, как они всплыли, сопровождающий также знал о втором месте, где была такая же проблема.

Эта проблема больше не должна возникать.

Чтобы полностью ответить на вопрос, я не могу вспомнить, какой ошибке дано время, поскольку я исправил это, но теперь возвращается конкретная ошибка, которую вы можете поймать и повторно подключиться.

Другие вопросы по тегам