code: def start_listener_thread(self, timeout_ms: int = 30000, exception_handler: Callable = None):
          
          assert not self.should_listen and self.sync_thread is None, 'Already running'
          self.should_listen = True
          self.sync_thread = gevent.spawn(self.listen_forever, timeout_ms, exception_handler)
          self.sync_thread.name = f'GMatrixClient.listen_forever user_id:{self.user_id}'
docs: Start a listener greenlet to listen for events in the background.
          Args:
              timeout_ms: How long to poll the Home Server for before retrying.
              exception_handler: Optional exception handler function which can
                  be used to handle exceptions in the caller thread.