From 88bf9d024053557e1d71740c4666726f802ec094 Mon Sep 17 00:00:00 2001 From: Ryan Williams Date: Wed, 2 Jun 2010 17:54:27 -0700 Subject: [PATCH] Named tpool threads, fixed rare race condition where _reqq would be freed before the thread got to it, causing log spam. Consolidated all patcher/tpool tests in one place. --- eventlet/tpool.py | 7 +++++-- tests/patcher_test.py | 32 ++++++++++++++++---------------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/eventlet/tpool.py b/eventlet/tpool.py index 13a0035..ed6cab9 100644 --- a/eventlet/tpool.py +++ b/eventlet/tpool.py @@ -68,7 +68,10 @@ SYS_EXCS = (KeyboardInterrupt, SystemExit) def tworker(): global _reqq, _rspq while(True): - msg = _reqq.get() + try: + msg = _reqq.get() + except AttributeError: + return # can't get anything off of a dud queue if msg is None: return (e,meth,args,kwargs) = msg @@ -249,7 +252,7 @@ def setup(): _reqq = Queue(maxsize=-1) _rspq = Queue(maxsize=-1) for i in range(0,_nthreads): - t = threading.Thread(target=tworker) + t = threading.Thread(target=tworker, name="tpool_thread_%s" % i) t.setDaemon(True) t.start() _threads.add(t) diff --git a/tests/patcher_test.py b/tests/patcher_test.py index 9b77ab8..78bd29f 100644 --- a/tests/patcher_test.py +++ b/tests/patcher_test.py @@ -126,22 +126,6 @@ print "newmod" self.assertEqual(len(lines), 2, repr(output)) self.assert_(lines[0].startswith('newmod'), repr(output)) - def test_tpool(self): - new_mod = """ -import eventlet -from eventlet import patcher -patcher.monkey_patch() -from eventlet import tpool -print "newmod", tpool.execute(len, "hi") -print "newmod", tpool.execute(len, "hi2") -""" - self.write_to_tempfile("newmod", new_mod) - output, lines = self.launch_subprocess('newmod.py') - self.assertEqual(len(lines), 3, repr(output)) - self.assert_(lines[0].startswith('newmod'), repr(output)) - self.assert_('2' in lines[0], repr(output)) - self.assert_('3' in lines[1], repr(output)) - def test_typeerror(self): new_mod = """ @@ -239,6 +223,22 @@ def test_monkey_patch_threading(): class Tpool(Patcher): TEST_TIMEOUT=3 + def test_simple(self): + new_mod = """ +import eventlet +from eventlet import patcher +patcher.monkey_patch() +from eventlet import tpool +print "newmod", tpool.execute(len, "hi") +print "newmod", tpool.execute(len, "hi2") +""" + self.write_to_tempfile("newmod", new_mod) + output, lines = self.launch_subprocess('newmod.py') + self.assertEqual(len(lines), 3, output) + self.assert_(lines[0].startswith('newmod'), repr(output)) + self.assert_('2' in lines[0], repr(output)) + self.assert_('3' in lines[1], repr(output)) + def test_unpatched_thread(self): new_mod = """import eventlet eventlet.monkey_patch(time=False, thread=False)