code: def test_shutdown(ray_start_2_cpus):
      config = TestConfig()
      e = BackendExecutor(config, num_workers=2)
      e.start()
      assert len(e.worker_group) == 2
      e.shutdown()
      with pytest.raises(InactiveWorkerGroupError):
          _start_training(e, lambda: 1)
  
imports: import math
  import os
  import tempfile
  import time
  from unittest.mock import patch
  import pytest
  import ray
  import ray._private.ray_constants
  from ray import train
  from ray.air._internal.util import StartTraceback
  from ray.tests.conftest import pytest_runtest_makereport
  from ray.train import DataConfig
  from ray.train._internal.backend_executor import BackendExecutor, InactiveWorkerGroupError, TrainBackendError, TrainingWorkerError
  from ray.train._internal.storage import StorageContext
  from ray.train._internal.worker_group import WorkerGroup, WorkerMetadata
  from ray.train.backend import Backend, BackendConfig
  from ray.train.constants import ENABLE_SHARE_CUDA_VISIBLE_DEVICES_ENV, ENABLE_SHARE_NEURON_CORES_ACCELERATOR_ENV, TRAIN_ENABLE_WORKER_SPREAD_ENV
  from ray.train.tensorflow import TensorflowConfig
  from ray.train.torch import TorchConfig
  from ray.util.placement_group import get_current_placement_group
  from ray.util.scheduling_strategies import PlacementGroupSchedulingStrategy
label_desc: Use image node_id 7 for calling a global function with example usage: test_shutdown(ray_start_2_cpus) without return types