def METHOD_NAME(self):
    """
    Loop to pass data (put by method feed) to observer.
    :return: None
    """
    logging.getLogger("moler_threads").debug("ENTER {}".format(self._observer))
    heartbeat = tracked_thread.report_alive()
    while not self._request_end.is_set():
        if next(heartbeat):
            logging.getLogger("moler_threads").debug("ALIVE")
        try:
            data, timestamp = self._queue.get(True, self._timeout_for_get_from_queue)
            try:
                self.logger.log(level=TRACE, msg=r'notifying {}({!r})'.format(self._observer, repr(data)))
            except ReferenceError:
                self._request_end.set()  # self._observer is no more valid.
            try:
                if self._observer_self:
                    self._observer(self._observer_self, data, timestamp)
                else:
                    self._observer(data, timestamp)
            except ReferenceError:
                self._request_end.set()  # self._observer is no more valid.
            except Exception as ex:
                self._handle_unexpected_error_from_observer(exception=ex, data=data, timestamp=timestamp)
        except queue.Empty:
            pass  # No incoming data within self._timeout_for_get_from_queue
    self._observer = None
    self._observer_self = None
    logging.getLogger("moler_threads").debug("EXIT")