def METHOD_NAME(self, item, block=True, timeout=None):
    """Put an item into the queue.
    If optional args `block` is True and `timeout` is None (the
    default), block if necessary until a free slot is
    available. If `timeout` is a positive number, it blocks at
    most `timeout` seconds and raises the ``Full`` exception if no
    free slot was available within that time.  Otherwise (`block`
    is false), put an item on the queue if a free slot is
    immediately available, else raise the ``Full`` exception
    (`timeout` is ignored in that case).
    """
    self.not_full.acquire()
    try:
        if not block:
            if self._full():
                raise Full
        elif timeout is None:
            while self._full():
                self.not_full.wait()
        else:
            if timeout < 0:
                raise ValueError("'timeout' must be a positive number")
            endtime = _time() + timeout
            while self._full():
                remaining = endtime - _time()
                if remaining <= 0.0:
                    raise Full
                self.not_full.wait(remaining)
        self._put(item)
        self.not_empty.notify()
    finally:
        self.not_full.release()