summaryrefslogtreecommitdiffstats
path: root/Lib/dummy_threading.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2002-12-30 22:30:22 (GMT)
committerGuido van Rossum <guido@python.org>2002-12-30 22:30:22 (GMT)
commitad50ca91a99e9a16a583fb13799c79f23067ef30 (patch)
tree31e4e18a5980f1c50029b117b3c6231cb0e59458 /Lib/dummy_threading.py
parentc91ed400e053dc9f11dd30c84e2bb611999dce50 (diff)
downloadcpython-ad50ca91a99e9a16a583fb13799c79f23067ef30.zip
cpython-ad50ca91a99e9a16a583fb13799c79f23067ef30.tar.gz
cpython-ad50ca91a99e9a16a583fb13799c79f23067ef30.tar.bz2
Brett Cannon's dummy_thread and dummy_threading modules (SF patch
622537), with some nitpicking editorial changes.
Diffstat (limited to 'Lib/dummy_threading.py')
-rw-r--r--Lib/dummy_threading.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/Lib/dummy_threading.py b/Lib/dummy_threading.py
new file mode 100644
index 0000000..2e070aa
--- /dev/null
+++ b/Lib/dummy_threading.py
@@ -0,0 +1,63 @@
+"""Faux ``threading`` version using ``dummy_thread`` instead of ``thread``.
+
+The module ``_dummy_threading`` is added to ``sys.modules`` in order
+to not have ``threading`` considered imported. Had ``threading`` been
+directly imported it would have made all subsequent imports succeed
+regardless of whether ``thread`` was available which is not desired.
+
+:Author: Brett Cannon
+:Contact: brett@python.org
+
+XXX: Try to get rid of ``_dummy_threading``.
+
+"""
+from sys import modules as sys_modules
+
+import dummy_thread
+
+# Declaring now so as to not have to nest ``try``s to get proper clean-up.
+holding_thread = False
+holding_threading = False
+
+try:
+ # Could have checked if ``thread`` was not in sys.modules and gone
+ # a different route, but decided to mirror technique used with
+ # ``threading`` below.
+ if 'thread' in sys_modules:
+ held_thread = sys_modules['thread']
+ holding_thread = True
+ # Must have some module named ``thread`` that implements its API
+ # in order to initially import ``threading``.
+ sys_modules['thread'] = sys_modules['dummy_thread']
+
+ if 'threading' in sys_modules:
+ # If ``threading`` is already imported, might as well prevent
+ # trying to import it more than needed by saving it if it is
+ # already imported before deleting it.
+ held_threading = sys_modules['threading']
+ holding_threading = True
+ del sys_modules['threading']
+ import threading
+ # Need a copy of the code kept somewhere...
+ sys_modules['_dummy_threading'] = sys_modules['threading']
+ del sys_modules['threading']
+ from _dummy_threading import *
+ from _dummy_threading import __all__
+
+finally:
+ # Put back ``threading`` if we overwrote earlier
+ if holding_threading:
+ sys_modules['threading'] = held_threading
+ del held_threading
+ del holding_threading
+
+ # Put back ``thread`` if we overwrote, else del the entry we made
+ if holding_thread:
+ sys_modules['thread'] = held_thread
+ del held_thread
+ else:
+ del sys_modules['thread']
+ del holding_thread
+
+ del dummy_thread
+ del sys_modules