def METHOD_NAME(self, event):
    """
    Set an event on this buffer.  When data is ready to be read (or the
    buffer has been closed), the event will be set.  When no data is
    ready, the event will be cleared.
    :param threading.Event event: the event to set/clear
    """
    self._lock.acquire()
    try:
        self._event = event
        # Make sure the event starts in `set` state if we appear to already
        # be closed; otherwise, if we start in `clear` state & are closed,
        # nothing will ever call `.feed` and the event (& OS pipe, if we're
        # wrapping one - see `Channel.fileno`) will permanently stay in
        # `clear`, causing deadlock if e.g. `select`ed upon.
        if self._closed or len(self._buffer) > 0:
            event.set()
        else:
            event.clear()
    finally:
        self._lock.release()