code: def test_exception_in_main_process(self):
      # When there's an exception in the main process, __del__() is not called.
      # This test is to verify MultiProcessPoolRunner can cope with __del__() not
      # being called.
      cluster_spec = multi_worker_test_base.create_cluster_spec(
          has_chief=True, num_workers=2
      )
      runner = multi_process_runner.MultiProcessPoolRunner(cluster_spec)
      runner.run(fn_that_returns_pid)
      raise ValueError("failure")
  
imports: import ctypes
  import json
  import os
  import sys
  import threading
  import time
  import unittest
  from absl import logging
  from absl.testing import parameterized
  from tensorflow.python.distribute import combinations
  from tensorflow.python.distribute import multi_process_runner
  from tensorflow.python.distribute import multi_worker_test_base
  from tensorflow.python.eager import context
  from tensorflow.python.eager import test
label_desc: Use image node_id 4 for calling the MultiProcessPoolRunnerTest obj's underlying member method code with example usage: obj.test_exception_in_main_process() without return types