code: def set_event(self, event):
          
          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()
docs: 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