Commit 9a91b0cd authored by Christian Heimes's avatar Christian Heimes

Added unit test to verify that threading.local doesn't cause ref leaks. It...

Added unit test to verify that threading.local doesn't cause ref leaks. It seems that the thread local storage always keeps the storage of the last stopped thread alive. Can anybody comment on it, please?
parent 670dc740
import unittest
from doctest import DocTestSuite
from test import test_support
import threading
import weakref
class Weak(object):
pass
def target(local, weaklist):
weak = Weak()
local.weak = weak
weaklist.append(weakref.ref(weak))
class ThreadingLocalTest(unittest.TestCase):
def test_local_refs(self):
local = threading.local()
weaklist = []
n = 20
for i in range(n):
t = threading.Thread(target=target, args=(local, weaklist))
t.start()
t.join()
self.assertEqual(len(weaklist), n)
deadlist = [weak for weak in weaklist if weak() is None]
# XXX threading.local keeps the local of the last stopped thread alive
self.assertEqual(len(deadlist), n-1)
def test_main():
suite = DocTestSuite('_threading_local')
suite = unittest.TestSuite()
suite.addTest(DocTestSuite('_threading_local'))
suite.addTest(unittest.makeSuite(ThreadingLocalTest))
try:
from thread import _local
......
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