mirror of
https://github.com/python/cpython.git
synced 2025-08-30 13:38:43 +00:00
Merged revisions 75958 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r75958 | antoine.pitrou | 2009-10-30 18:07:08 +0100 (ven., 30 oct. 2009) | 7 lines Issue #7222: Make thread "reaping" more reliable so that reference leak-chasing test runs give sensible results. The previous method of reaping threads could return successfully while some Thread objects were still referenced. This also introduces a new private function: :func:hread._count(). ........
This commit is contained in:
parent
a2d1fe0b84
commit
65c9c6426b
5 changed files with 83 additions and 14 deletions
|
@ -4,6 +4,7 @@ import random
|
|||
from test import support
|
||||
import _thread as thread
|
||||
import time
|
||||
import weakref
|
||||
|
||||
|
||||
NUMTASKS = 10
|
||||
|
@ -99,6 +100,32 @@ class ThreadRunningTests(BasicThreadTest):
|
|||
|
||||
thread.stack_size(0)
|
||||
|
||||
def test__count(self):
|
||||
# Test the _count() function.
|
||||
orig = thread._count()
|
||||
mut = thread.allocate_lock()
|
||||
mut.acquire()
|
||||
started = []
|
||||
def task():
|
||||
started.append(None)
|
||||
mut.acquire()
|
||||
mut.release()
|
||||
thread.start_new_thread(task, ())
|
||||
while not started:
|
||||
time.sleep(0.01)
|
||||
self.assertEquals(thread._count(), orig + 1)
|
||||
# Allow the task to finish.
|
||||
mut.release()
|
||||
# The only reliable way to be sure that the thread ended from the
|
||||
# interpreter's point of view is to wait for the function object to be
|
||||
# destroyed.
|
||||
done = []
|
||||
wr = weakref.ref(task, lambda _: done.append(None))
|
||||
del task
|
||||
while not done:
|
||||
time.sleep(0.01)
|
||||
self.assertEquals(thread._count(), orig)
|
||||
|
||||
|
||||
class Barrier:
|
||||
def __init__(self, num_threads):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue