code: def test_inheritable_tags(self):
      self.check_inheritable_tags(
          create_thread=lambda target, session: InheritableThread(
              target, session=session
          )
      )
      self.check_inheritable_tags(
          create_thread=lambda target, session: threading.Thread(
              target=inheritable_thread_target(session)(target)
          )
      )
  
      # Test decorator usage
      @inheritable_thread_target(self.spark)
      def func(target):
          return target()
  
      self.check_inheritable_tags(
          create_thread=lambda target, session: threading.Thread(
              target=func, args=(target,)
          )
      )
  
imports: import threading
  import time
  import unittest
  from typing import Optional
  from pyspark import InheritableThread, inheritable_thread_target
  from pyspark.sql.connect.client import ChannelBuilder
  from pyspark.sql.connect.session import SparkSession
  from pyspark.testing.connectutils import should_test_connect
label_desc: Use image node_id 5 for calling the JobCancellationTests obj's underlying member method code with example usage: obj.test_inheritable_tags() and returns: target