code: def test_should_start_new_batch_when_missing_many_workers(
      self, mock_sleep
  ):
      self.monitor._get_num_ready_workers_running.return_value = 1
      self.monitor._get_num_workers_running.return_value = 1
      self.monitor._check_workers()
      # missing 3 workers, but starting single batch (2)
      self.monitor._spawn_new_workers.assert_called_once_with(2)
      self.monitor._kill_old_workers.assert_not_called()
      self.monitor._reload_gunicorn.assert_not_called()
  
imports: from __future__ import annotations
  import os
  import subprocess
  import sys
  import time
  from unittest import mock
  import psutil
  import pytest
  from rich.console import Console
  from airflow import settings
  from airflow.cli import cli_parser
  from airflow.cli.commands import webserver_command
  from airflow.cli.commands.webserver_command import GunicornMonitor
  from tests.cli.commands._common_cli_classes import _ComonCLIGunicornTestClass
  from tests.test_utils.config import conf_vars
label_desc: Use image node_id 5 for calling the TestGunicornMonitor obj's underlying member method code with example usage: obj.test_should_start_new_batch_when_missing_many_workers(mock_sleep) without return types