Arguments:
            item (dict): item to queue up.
            timeout (int): if no response in this many seconds, then give up.

        Returns:
            if timed out, then returns None.
            otherwise returns a `dict` corresponding to the response.

def send(self, item, timeout=30):
        """
        Arguments:
            item (dict): item to queue up.
            timeout (int): if no response in this many seconds, then give up.

        Returns:
            if timed out, then returns None.
            otherwise returns a `dict` corresponding to the response.
        """
        uid = str(uuid.uuid4().int & (1<<64)-1)
        msg = {'id': uid, 'msg': item}
        self.db.rpush(self.send_addr, json.dumps(msg))
        key, resp = self.db.blpop(self.recv_addr.format(id=uid), timeout=30)
        if resp:
            return json.loads(resp.decode())
        else:
            return None