私はこのテストコードを持っています:
import redis
r = redis.Redis()
response = r.blpop('testkey', timeout=1)
print response
複数回実行すると、常に 1 秒よりもかなり長く、通常は 2 秒近くかかります。私の redis サーバーはローカルであるため、遅延は発生しません。Redis はタイムアウトの時間を正確に計っていませんか、それとも python クライアントが行っていることですか?
ありがとう
プログラムでは、blpop タイムアウトに加えて、Python エンジンの起動時間、パッケージのインポート、Redis への接続の確立も考慮する必要があります。
さらに、タイムアウトを設定しても、最大待機時間は保証されません。ポップするものが何もない場合の最小待機時間を保証しますが、これは異なります。
blpop の場合、タイムアウトはクライアント側ではなくサーバー側で管理されることに注意してください。サーバーは、numclients/(hz*10) クライアントを毎秒 hz 回チェックする遅延アルゴリズムを使用してこれを行います。Hz は調整可能な Redis パラメーターです。