Issue #7449, part 1: fix test_support.py for Python compiled without thread
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index d76d569..7dc52bb 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -18,6 +18,10 @@
 import UserDict
 import re
 import time
+try:
+    import thread
+except ImportError:
+    thread = None
 
 __all__ = ["Error", "TestFailed", "ResourceDenied", "import_module",
            "verbose", "use_resources", "max_memuse", "record_original_stdout",
@@ -44,7 +48,7 @@
     """Test skipped because it requested a disallowed resource.
 
     This is raised when a test calls requires() for a resource that
-    has not be enabled.  It is used to distinguish between expected
+    has not been enabled.  It is used to distinguish between expected
     and unexpected skips.
     """
 
@@ -1078,11 +1082,14 @@
 # at the end of a test run.
 
 def threading_setup():
-    import thread
-    return thread._count(),
+    if thread:
+        return thread._count(),
+    else:
+        return 1,
 
 def threading_cleanup(nb_threads):
-    import thread
+    if not thread:
+        return
 
     _MAX_COUNT = 10
     for count in range(_MAX_COUNT):
@@ -1093,6 +1100,13 @@
     # XXX print a warning in case of failure?
 
 def reap_threads(func):
+    """Use this function when threads are being used.  This will
+    ensure that the threads are cleaned up even when the test fails.
+    If threading is unavailable this function does nothing.
+    """
+    if not thread:
+        return func
+
     @functools.wraps(func)
     def decorator(*args):
         key = threading_setup()
diff --git a/Misc/NEWS b/Misc/NEWS
index de05472..7ba33ba 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -109,6 +109,8 @@
 Tests
 -----
 
+- Issue #7449: Fix many tests to support Python compiled without thread support
+
 - Issue #8108: test_ftplib's non-blocking SSL server now has proper handling
   of SSL shutdowns.