Python 从redis发布/订阅中断开的连接中恢复

Python 从redis发布/订阅中断开的连接中恢复,python,redis,redistogo,Python,Redis,Redistogo,我正在运行连接到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']

我正在运行连接到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程序中完成吗?我应该有一个外部看门狗吗?

不幸的是,必须“ping”Redis以检查它是否可用。如果您试图向Redis存储器中输入一个值,如果连接丢失,它将引发
ConnectionError
异常。但是,当连接丢失时,listen()生成器不会自动关闭

我认为黑客入侵Redis的连接池会有所帮助,试试看


在一个不受信任的网络环境中连接到redis是非常不安全的。

这是一个老生常谈的问题,但我将自己的一个问题与之关联,并碰巧再次遇到它。事实证明,redis库中存在一个bug,导致客户端在与redis服务器失去连接时进入无限循环,试图重新连接。我调试了问题和更改。它在很久以前就被合并了。一旦浮出水面,维修人员也知道第二个位置也有同样的问题

这个问题不应该再发生了


为了完全回答这个问题,我记不起在修复此错误后给出的时间是哪一个错误,但现在返回了一个特定的错误,您可以捕获并重新连接。

如果在连接池中使用pubsub并启用
testWhileIdle
,我假设将传输ping并检测失败的连接?