redis-py体験レポート No.4

ブロッキング操作

lpopやrpopを実行した時、リストに値がないとNoneが返ります。
blpopやbrpopを使うと、リストに値が格納されるまでブロックします。

(実験)
2個の端末ソフトを起動し、それぞれを端末1、端末2とします。
両方の端末でPython対話モードに入り、以下のコマンドを実行しRedisサーバーに接続しておきます。

>>> import redis
>>> conn = redis.Redis()

まず端末1で以下を入力。

>>> conn.blpop('song')

リストsongにはデータが入っていない(というか、songそのものがまだない)ため、うんともすんとも言いません。

次に端末2で以下を入力。

>>> conn.lpush('song', 'Yesterday')
1

すると、端末1は以下のようになります。

>>> conn.blpop('song')
(b'song', b'Yesterday')

blpopが値を取得できたため、ブロックを解除しました。

Redisプログラミング物語 © 2016 Frontier Theme