summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2003-06-13 23:44:35 (GMT)
committerBrett Cannon <bcannon@gmail.com>2003-06-13 23:44:35 (GMT)
commit4e64d78bbb961672ee324db234c70320ed4db6d5 (patch)
treec5aa27b4e8b98693b93bfdf01e42ea1ac007c608 /Lib
parent93e8e5492402d55e0c0c4b08ff213783f5891561 (diff)
downloadcpython-4e64d78bbb961672ee324db234c70320ed4db6d5.zip
cpython-4e64d78bbb961672ee324db234c70320ed4db6d5.tar.gz
cpython-4e64d78bbb961672ee324db234c70320ed4db6d5.tar.bz2
dummy_thread modified to have interrupt_main and to behave appropriately when
called. Added announcement in Misc/NEWS for thread.interrupt_main and mention of dummy_thread's change.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/dummy_thread.py18
-rw-r--r--Lib/test/test_dummy_thread.py8
2 files changed, 25 insertions, 1 deletions
diff --git a/Lib/dummy_thread.py b/Lib/dummy_thread.py
index e4bf05a..7da51b9 100644
--- a/Lib/dummy_thread.py
+++ b/Lib/dummy_thread.py
@@ -17,7 +17,7 @@ __email__ = "brett@python.org"
# Exports only things specified by thread documentation
# (skipping obsolete synonyms allocate(), start_new(), exit_thread())
__all__ = ['error', 'start_new_thread', 'exit', 'get_ident', 'allocate_lock',
- 'LockType']
+ 'interrupt_main', 'LockType']
import traceback as _traceback
@@ -36,6 +36,9 @@ def start_new_thread(function, args, kwargs={}):
caught and nothing is done; all other exceptions are printed out
by using traceback.print_exc().
+ If the executed function calls interrupt_main the KeyboardInterrupt will be
+ raised when the function returns.
+
"""
if type(args) != type(tuple()):
raise TypeError("2nd arg must be a tuple")
@@ -47,6 +50,10 @@ def start_new_thread(function, args, kwargs={}):
pass
except:
_traceback.print_exc()
+ if _interrupt:
+ global _interrupt
+ _interrupt = False
+ raise KeyboardInterrupt
def exit():
"""Dummy implementation of thread.exit()."""
@@ -114,3 +121,12 @@ class LockType(object):
def locked(self):
return self.locked_status
+
+
+_interrupt = False
+
+def interrupt_main():
+ """Set _interrupt flag to True to have start_new_thread raise
+ KeyboardInterrupt upon exiting."""
+ global _interrupt
+ _interrupt = True
diff --git a/Lib/test/test_dummy_thread.py b/Lib/test/test_dummy_thread.py
index 0d614e1..d437cb1 100644
--- a/Lib/test/test_dummy_thread.py
+++ b/Lib/test/test_dummy_thread.py
@@ -102,6 +102,14 @@ class MiscTests(unittest.TestCase):
"_thread.LockType is not an instance of what is "
"returned by _thread.allocate_lock()")
+ def test_interrupt_main(self):
+ #Calling start_new_thread with a function that executes interrupt_main
+ # should raise KeyboardInterrupt upon completion.
+ def call_interrupt():
+ _thread.interrupt_main()
+ self.failUnlessRaises(KeyboardInterrupt, _thread.start_new_thread,
+ call_interrupt, tuple())
+
class ThreadTests(unittest.TestCase):
"""Test thread creation."""