def METHOD_NAME(self):
    sleep = gevent.monkey._get_original("time", ["sleep"])[0]
    self.async_watcher.start(self.new_event)
    err_callback_args = None
    error_cb = None
    first_run = True
    while not self.stop_event.is_set():
        if first_run and self.delay:
            sleep(self.delay / 1000.0)
        first_run = False
        if self.stop_event.is_set():
            break
        polled_call = self.polled_call_ref()
        if polled_call is None:
            break
        try:
            res = polled_call(*self.args)
        except Exception as e:
            if self.stop_event.is_set():
                break
            error_cb = self.error_callback_ref()
            if error_cb is not None:
                self.queue.put(PollingException(e, self.get_id()))
            break
        del polled_call
        if self.stop_event.is_set():
            break
        if isinstance(res, numpy.ndarray):  # for arrays
            comparison = res == self.old_res
            if isinstance(comparison, bool):
                is_equal = comparison
            else:
                is_equal = all(comparison)
        else:
            is_equal = res == self.old_res
        if self.compare and is_equal:
            # do nothing: previous value is the same as "new" value
            pass
        else:
            new_value = True
            if self.compare:
                new_value = not is_equal
            if new_value:
                self.old_res = res
                self.queue.put(res)
                self.async_watcher.send()
        sleep(self.polling_period / 1000.0)
    if error_cb is not None:
        self.async_watcher.send()