code: def notify(self, n=1):
          
          if not self._is_owned():
              raise RuntimeError("cannot notify on un-acquired lock")
          __waiters = self.__waiters
          waiters = __waiters[:n]
          if not waiters:
              if __debug__:
                  self._note("%s.notify(): no waiters", self)
              return
          self._note("%s.notify(): notifying %d waiter%s", self, n,
                     n!=1 and "s" or "")
          for waiter in waiters:
              waiter.release()
              try:
                  __waiters.remove(waiter)
              except ValueError:
                  pass
docs: Wake up one or more threads waiting on this condition, if any.
  
          If the calling thread has not acquired the lock when this method is
          called, a RuntimeError is raised.
  
          This method wakes up at most n of the threads waiting for the condition
          variable; it is a no-op if no threads are waiting.