code: def test_shutdown_deadlock_pickle(self):
      # Test that the pool calling shutdown with wait=False does not cause
      # a deadlock if a task fails at pickle after the shutdown call.
      # Reported in bpo-39104.
      self.executor.shutdown(wait=True)
      with self.executor_type(
          max_workers=2, mp_context=self.get_context()
      ) as executor:
          self.executor = executor  # Allow clean up in fail_on_deadlock
  
          # Start the executor and get the executor_manager_thread to collect
          # the threads and avoid dangling thread that should be cleaned up
          # asynchronously.
          executor.submit(id, 42).result()
          executor_manager = executor._executor_manager_thread
  
          # Submit a task that fails at pickle and shutdown the executor
          # without waiting
          f = executor.submit(id, ErrorAtPickle())
          executor.shutdown(wait=False)
          with self.assertRaises(PicklingError):
              f.result()
  
      # Make sure the executor is eventually shutdown and do not leave
      # dangling threads
      executor_manager.join()
  
imports: import contextlib
  import queue
  import signal
  import sys
  import time
  import unittest
  import unittest.mock
  from pickle import PicklingError
  from concurrent import futures
  from concurrent.futures.process import BrokenProcessPool, _ThreadWakeup
  from test import support
  from .util import create_executor_tests, setup_module, ProcessPoolForkMixin, ProcessPoolForkserverMixin, ProcessPoolSpawnMixin
label_desc: Use image node_id 16 for calling the ExecutorDeadlockTest obj's underlying member method code with example usage: obj.test_shutdown_deadlock_pickle() without return types