14

以下のコードで、パイプラインのタイムアウトは 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 に変更すると、ok が返されます。
パラメータ「socket_timeout」は接続タイムアウトを意味しませんか? しかし、応答タイムアウトのようです。
redis-py のバージョンは 2.6.7 です。

4

2 に答える 2

27

redis-py の作者である andymccurdy さんに github で質問たところ、次のような答えが返ってきました。

redis-py<=2.9.1 を使用している場合、socket_timeout はソケット接続のタイムアウトとソケットへの読み取り/書き込みのタイムアウトの両方です。最近、新しいオプション socket_connect_timeout を導入する変更 (465e74d) をプッシュしました。これにより、socket.send/socket.recv() とは異なる方法で、socket.connect() に異なるタイムアウト値を指定できます。この変更は、今週後半にリリースされる予定の 2.10 に含まれます。

redis-pyのバージョンは2.6.7なので、ソケット接続のタイムアウトとソケットへの読み書きのタイムアウトの両方です。

于 2014-05-30T23:36:41.597 に答える