code: def test_max_tasks_early_shutdown(self):
      context = self.get_context()
      if context.get_start_method(allow_none=False) == "fork":
          raise unittest.SkipTest(
              "Incompatible with the fork start method."
          )
      # not using self.executor as we need to control construction.
      # arguably this could go in another class w/o that mixin.
      executor = self.executor_type(
          3, mp_context=context, max_tasks_per_child=1
      )
      futures = []
      for i in range(6):
          futures.append(executor.submit(mul, i, i))
      executor.shutdown()
      for i, future in enumerate(futures):
          self.assertEqual(future.result(), mul(i, i))
  
imports: import os
  import sys
  import threading
  import time
  import unittest
  from concurrent import futures
  from concurrent.futures.process import BrokenProcessPool
  from test import support
  from test.support import hashlib_helper
  from .executor import ExecutorTest, mul
  from .util import ProcessPoolForkMixin, ProcessPoolForkserverMixin, ProcessPoolSpawnMixin, create_executor_tests, setup_module
label_desc: Use image node_id 12 for calling the ProcessPoolExecutorTest obj's underlying member method code with example usage: obj.test_max_tasks_early_shutdown() without return types