docs: def xread(self, streams, count=None, block=None):
          """
          Block and monitor multiple streams for new data.
          streams: a dict of stream names to stream IDs, where
                     IDs indicate the last ID already seen.
          count: if set, only return this many items, beginning with the
                 earliest available.
          block: number of milliseconds to wait, if nothing already present.
          """
          pieces = []
          if block is not None:
              if not isinstance(block, (int, long)) or block < 0:
                  raise DataError('XREAD block must be a non-negative integer')
              pieces.append(Token.get_token('BLOCK'))
              pieces.append(str(block))
          if count is not None:
              if not isinstance(count, (int, long)) or count < 1:
                  raise DataError('XREAD count must be a positive integer')
              pieces.append(Token.get_token('COUNT'))
              pieces.append(str(count))
          if not isinstance(streams, dict) or len(streams) == 0:
              raise DataError('XREAD streams must be a non empty dict')
          pieces.append(Token.get_token('STREAMS'))
          keys, values = izip(*iteritems(streams))
          pieces.extend(keys)
          pieces.extend(values)
          return self.execute_command('XREAD', *pieces)