code: def start(self, app, start_timeout=3, **kwargs):
      self.port = kwargs.get("port", 8050)
  
      def target():
          app.scripts.config.serve_locally = True
          app.css.config.serve_locally = True
  
          options = kwargs.copy()
  
          try:
              app.run(threaded=True, **options)
          except SystemExit:
              logger.info("Server stopped")
              raise
          except Exception as error:
              logger.exception(error)
              raise error
  
      self.proc = multiprocess.Process(
          target=target
      )  # pylint: disable=not-callable
      self.proc.start()
  
      wait.until(
          lambda: self.accessible(self.url), timeout=start_timeout
      )
      self.started = True
  
imports: import sys
  import os
  import time
  import uuid
  import shlex
  import threading
  import shutil
  import subprocess
  import logging
  import inspect
  import ctypes
  import runpy
  import requests
  import psutil
  import multiprocess
  from dash.testing.errors import NoAppFoundError, TestingTimeoutError, ServerCloseError, DashAppLoadingError
  from dash.testing import wait
label_desc: Use image node_id 2 for calling the MultiProcessRunner obj's underlying member method code with example usage: obj.start(app, start_timeout) without return types