Как установить redis timeout, ожидающий ответа с конвейером в redis-py?

В приведенном ниже коде истекает время ожидания конвейера 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 в наборе "ключ" есть много членов. Он всегда возвращает ошибку, как показано ниже, с последним кодом:

error Error while reading from socket: ('timed out',)

Если я изменил значение socket_timeout на 10, он вернется в норму. Разве параметр "socket_timeout" не означает время соединения? Но это похоже на тайм-аут ответа. Версия redis-py - 2.6.7.

2 ответа

Я спросил andymccurdy, автор redis-py, github и ответ как показано ниже:

Если вы используете redis-py <= 2.9.1, socket_timeout - это время ожидания для подключения сокетов и таймаута для чтения/записи на разъем. Недавно я нажал на изменение (465e74d), в котором вводится новый option, socket_connect_timeout. Это позволяет вам указать разные значения тайм-аута для socket.connect() по-разному socket.send/socket.recv(). Это изменение будет включено в 2.10, которое будет выпущен позднее на этой неделе.

Версия redis-py - 2.6.7, поэтому это время ожидания для подключения сокета и таймаут для чтения/записи в сокет.


Это не время ожидания соединения, это таймаут работы. Внутренний аргумент socket_timeout в StrictRedis() будет передан методу setsetout сокета.

Подробнее см. здесь: https://docs.python.org/2/library/socket.html#socket.socket.settimeout

licensed under cc by-sa 3.0 with attribution.