Kaydet (Commit) 72460fa6 authored tarafından Tim Peters's avatar Tim Peters

Get "stopped" back into repr(Thread) when appropriate.

Due to recent changes, a Thread doesn't know that it's over before
someone calls .join() or .is_alive().  That meant repr(Thread)
continued to include "started" (and not "stopped") before one of
those methods was called, even if hours passed since the thread
ended.

Repaired that.
üst b5e9ac9e
...@@ -573,6 +573,31 @@ class ThreadTests(BaseTestCase): ...@@ -573,6 +573,31 @@ class ThreadTests(BaseTestCase):
# And verify the thread disposed of _tstate_lock. # And verify the thread disposed of _tstate_lock.
self.assertTrue(t._tstate_lock is None) self.assertTrue(t._tstate_lock is None)
def test_repr_stopped(self):
# Verify that "stopped" shows up in repr(Thread) appropriately.
started = _thread.allocate_lock()
finish = _thread.allocate_lock()
started.acquire()
finish.acquire()
def f():
started.release()
finish.acquire()
t = threading.Thread(target=f)
t.start()
started.acquire()
self.assertIn("started", repr(t))
finish.release()
# "stopped" should appear in the repr in a reasonable amount of time.
# Implementation detail: as of this writing, that's trivially true
# if .join() is called, and almost trivially true if .is_alive() is
# called. The detail we're testing here is that "stopped" shows up
# "all on its own".
LOOKING_FOR = "stopped"
for i in range(500):
if LOOKING_FOR in repr(t):
break
time.sleep(0.01)
self.assertIn(LOOKING_FOR, repr(t)) # we waited at least 5 seconds
class ThreadJoinOnShutdown(BaseTestCase): class ThreadJoinOnShutdown(BaseTestCase):
......
...@@ -574,6 +574,7 @@ class Thread: ...@@ -574,6 +574,7 @@ class Thread:
status = "initial" status = "initial"
if self._started.is_set(): if self._started.is_set():
status = "started" status = "started"
self.is_alive() # easy way to get ._is_stopped set when appropriate
if self._is_stopped: if self._is_stopped:
status = "stopped" status = "stopped"
if self._daemonic: if self._daemonic:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment