code: def _init_server(
      backend_uri,
      root_artifact_uri,
      extra_env=None,
      app="mlflow.server:app",
  ):
      """
      Launch a new REST server using the tracking store specified by backend_uri and root artifact
      directory specified by root_artifact_uri.
      :returns A tuple (url, process) containing the string URL of the server and a handle to the
               server process (a multiprocessing.Process object).
      """
      mlflow.set_tracking_uri(None)
      server_port = get_safe_port()
      with Popen(
          [
              sys.executable,
              "-m",
              "flask",
              "--app",
              app,
              "run",
              "--host",
              LOCALHOST,
              "--port",
              str(server_port),
          ],
          env={
              **os.environ,
              BACKEND_STORE_URI_ENV_VAR: backend_uri,
              ARTIFACT_ROOT_ENV_VAR: root_artifact_uri,
              **(extra_env or {}),
          },
      ) as proc:
          _await_server_up_or_die(server_port)
          url = f"http://{LOCALHOST}:{server_port}"
          _logger.info(
              f"Launching tracking server against backend URI {backend_uri}. Server URL: {url}"
          )
          yield url
          proc.terminate()
  
file_path: mlflow/tests/tracking/integration_test_utils.py
imports: import contextlib
  import logging
  import os
  import socket
  import sys
  import time
  from subprocess import Popen
  import mlflow
  from mlflow.server import ARTIFACT_ROOT_ENV_VAR, BACKEND_STORE_URI_ENV_VAR
  from tests.helper_functions import LOCALHOST, get_safe_port
label_desc: Use image node_id 2 for calling a global function with example usage: _init_server(backend_uri, root_artifact_uri, extra_env, app) without return types