Восстановление из сброшенного соединения в 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. Я отладил проблему и сообщил об изменении. он был объединен давным-давно. После того, как они всплыли, сопровождающий также знал о втором месте, где была такая же проблема.
Эта проблема больше не должна возникать.
Чтобы полностью ответить на вопрос, я не могу вспомнить, какой ошибке дано время, поскольку я исправил это, но теперь возвращается конкретная ошибка, которую вы можете поймать и повторно подключиться.