9

我正在运行连接到 redis 数据库的客户端。客户端在 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程序中完成吗?我应该有一个外部看门狗吗?

4

2 回答 2

2

Unfortunately, one have to 'ping' Redis to check if it is available. If You try to put a value to Redis storage, it will raise an ConnectionError exception if connection is lost. But the listen() generator will not close automatically when connection is lost.

I think that hacking Redis' connection pool could help, give it a try.

P.S. In is very insecure to connect to redis in an untrusted network environment.

于 2013-10-04T11:04:40.993 回答
1

这是一个古老的问题,但我将自己的一个问题与它联系起来,并且碰巧再次遇到它。事实证明,redis 库中存在一个错误,导致客户端进入无限循环,如果它与 redis 服务器的连接断开,则尝试重新连接。我调试了这个问题并公关了这个变化。它是很久以前合并的。一旦浮出水面,维护者也知道有同样问题的第二个位置。

这个问题不应该再出现了。

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

于 2019-09-03T19:30:57.170 回答