def brpop(self, keys, timeout=<NUM_LIT:0>):
map = {self.redis_key(k): k for k in self._parse_values(keys)}<EOL>keys = map.keys()<EOL>with self.pipe as pipe:<EOL><INDENT>f = Future()<EOL>res = pipe.brpop(keys, timeout=timeout)<EOL>def cb():<EOL><INDENT>if res.result:<EOL><INDENT>k = map[res.result[<NUM_LIT:0>]]<EOL>v = self.valueparse.decode(res.result[<NUM_LIT:1>])<EOL>f.set((k, v))<EOL><DEDENT>else:<EOL><INDENT>f.set(res.result)<EOL><DEDENT><DEDENT>pipe.on_execute(cb)<EOL>return f<EOL><DEDENT>
RPOP a value off of the first non-empty list
named in the ``keys`` list.

If none of the lists in ``keys`` has a value to LPOP, then block
for ``timeout`` seconds, or until a value gets pushed on to one
of the lists.

If timeout is 0, then block indefinitely.