'Start the main poller loop. It will loop until requested to exit'

def start(self):

    self._start_nesting_levels += 1
    if (self._start_nesting_levels == 1):
        LOGGER.debug('Entering    IOLoop')
        self._stopping = False
        self.activate_poller()
        with self._mutex:
            assert (self._r_interrupt is None)
            (self._r_interrupt, self._w_interrupt) = self._get_interrupt_pair()
            self.add_handler(self._r_interrupt.fileno(), self._read_interrupt, READ)
    else:
        LOGGER.debug('Reentering    IOLoop    at    nesting    level=%s', self._start_nesting_levels)
    try:
        while (not self._stopping):
            self.poll()
            self.process_timeouts()
    finally:
        self._start_nesting_levels -= 1
        if (self._start_nesting_levels == 0):
            LOGGER.debug('Cleaning    up    IOLoop')
            with self._mutex:
                self.remove_handler(self._r_interrupt.fileno())
                self._r_interrupt.close()
                self._r_interrupt = None
                self._w_interrupt.close()
                self._w_interrupt = None
            self.deactivate_poller()
        else:
            LOGGER.debug('Leaving    IOLoop    with    %s    nesting    levels    remaining', self._start_nesting_levels)
