如何在redis-py中设置redis管道响应的超时时间?
在下面的代码中,管道的超时时间是2秒吗?
client = redis.StrictRedis(host=host, port=port, db=0, socket_timeout=2)
pipe = client.pipeline(transaction=False)
for name in namelist:
key = "%s-%s-%s-%s" % (key_sub1, key_sub2, name, key_sub3)
pipe.smembers(key)
pipe.execute()
在redis中,"key"这个集合里有很多成员。使用下面的代码时,它总是返回下面的错误:
error Error while reading from socket: ('timed out',)
如果我把socket_timeout的值改成10,它就能正常返回了。
难道“socket_timeout”这个参数不是指连接超时吗?但看起来像是响应超时。
我使用的redis-py版本是2.6.7。
2 个回答
3
这不是连接超时,而是操作超时。内部的 socket_timeout 参数会传递给 StrictRedis() 中的 socket 的 settimeout 方法。
想了解更多细节,可以查看这里: https://docs.python.org/2/library/socket.html#socket.socket.settimeout
29
我在GitHub上问了andymccurdy,也就是redis-py的作者,他的回答如下:
如果你使用的是redis-py版本小于等于2.9.1,socket_timeout既是连接socket的超时时间,也是读取/写入socket的超时时间。最近我做了一个更新(465e74d),引入了一个新选项,叫做socket_connect_timeout。这个选项让你可以为socket.connect()设置一个超时时间,而为socket.send和socket.recv设置另一个不同的超时时间。这个更新会在2.10版本中发布,预计本周晚些时候上线。
目前使用的redis-py版本是2.6.7,所以在这个版本中,socket_timeout既是连接socket的超时时间,也是读取和写入socket的超时时间。