def METHOD_NAME(self) -> Iterator[InsWrapper]:
    """Return iterator over ins_wrapper objects."""
    while not self._is_closed():
        with self._cv:
            self._cv.wait_for(
                lambda: self._status
                in [Status.CLOSED, Status.INS_WRAPPER_AVAILABLE]
            )
            self._raise_if_closed()
            ins_wrapper = self._ins_wrapper  # Read
            self._ins_wrapper = None  # Reset
            # Transition before yielding as after the yield the execution of this
            # function is paused and will resume when next is called again.
            # Also release condition variable by exiting the context
            self._transition(Status.AWAITING_RES_WRAPPER)
        if ins_wrapper is None:
            raise Exception("InsWrapper can not be None")
        yield ins_wrapper