(root)/
Python-3.11.7/
Lib/
test/
test_importlib/
threaded_import_hangers.py
       1  # This is a helper module for test_threaded_import.  The test imports this
       2  # module, and this module tries to run various Python library functions in
       3  # their own thread, as a side effect of being imported.  If the spawned
       4  # thread doesn't complete in TIMEOUT seconds, an "appeared to hang" message
       5  # is appended to the module-global `errors` list.  That list remains empty
       6  # if (and only if) all functions tested complete.
       7  
       8  TIMEOUT = 10
       9  
      10  import threading
      11  
      12  import tempfile
      13  import os.path
      14  
      15  errors = []
      16  
      17  # This class merely runs a function in its own thread T.  The thread importing
      18  # this module holds the import lock, so if the function called by T tries
      19  # to do its own imports it will block waiting for this module's import
      20  # to complete.
      21  class ESC[4;38;5;81mWorker(ESC[4;38;5;149mthreadingESC[4;38;5;149m.ESC[4;38;5;149mThread):
      22      def __init__(self, function, args):
      23          threading.Thread.__init__(self)
      24          self.function = function
      25          self.args = args
      26  
      27      def run(self):
      28          self.function(*self.args)
      29  
      30  for name, func, args in [
      31          # Bug 147376:  TemporaryFile hung on Windows, starting in Python 2.4.
      32          ("tempfile.TemporaryFile", lambda: tempfile.TemporaryFile().close(), ()),
      33  
      34          # The real cause for bug 147376:  ntpath.abspath() caused the hang.
      35          ("os.path.abspath", os.path.abspath, ('.',)),
      36          ]:
      37  
      38      try:
      39          t = Worker(func, args)
      40          t.start()
      41          t.join(TIMEOUT)
      42          if t.is_alive():
      43              errors.append("%s appeared to hang" % name)
      44      finally:
      45          del t