def METHOD_NAME(self, installSignalHandlers=True):
    """
    Start the reactor.
    """
    self._postQueue = Queue()
    if not hasattr(self, "wxapp"):
        log.msg(
            "registerWxApp() was not called on reactor, "
            "registering my own wxApp instance."
        )
        self.registerWxApp(wxPySimpleApp())
    # start select() thread:
    self.interleave(
        self._runInMainThread, installSignalHandlers=installSignalHandlers
    )
    if installSignalHandlers:
        self.callLater(0, self._installSignalHandlersAgain)
    # add cleanup events:
    self.addSystemEventTrigger("after", "shutdown", self._stopWx)
    self.addSystemEventTrigger(
        "after", "shutdown", lambda: self._postQueue.put(None)
    )
    # On macOS, work around wx bug by starting timer to ensure
    # wxCallAfter calls are always processed. We don't wake up as
    # often as we could since that uses too much CPU.
    if runtime.platform.isMacOSX():
        t = ProcessEventsTimer(self.wxapp)
        t.Start(2)  # wake up every 2ms
    self.wxapp.MainLoop()
    wxapp = self.wxapp
    del self.wxapp
    if not self._stopping:
        # wx event loop exited without reactor.stop() being
        # called.  At this point events from select() thread will
        # be added to _postQueue, but some may still be waiting
        # unprocessed in wx, thus the ProcessPendingEvents()
        # below.
        self.stop()
        wxapp.ProcessPendingEvents()  # deal with any queued wxCallAfters
        while 1:
            try:
                f = self._postQueue.get(timeout=0.01)
            except Empty:
                continue
            else:
                if f is None:
                    break
                try:
                    f()
                except BaseException:
                    log.err()