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.
This commit is contained in:
parent
93e8e54924
commit
4e64d78bbb
|
@ -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
|
||||
|
|
|
@ -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."""
|
||||
|
||||
|
|
|
@ -55,6 +55,9 @@ Core and builtins
|
|||
Extension modules
|
||||
-----------------
|
||||
|
||||
- thread.interrupt_main() raises KeyboardInterrupt in the main thread.
|
||||
dummy_thread has also been modified to try to simulate the behavior.
|
||||
|
||||
- array.array.insert() now treats negative indices as being relative
|
||||
to the end of the array, just like list.insert() does. (SF bug #739313)
|
||||
|
||||
|
|
Loading…
Reference in New Issue