bpo-31234: Join threads in test_queue (#3586) · python/cpython@167cbde (original) (raw)
`@@ -47,28 +47,27 @@ def run(self):
`
47
47
``
48
48
`class BlockingTestMixin:
`
49
49
``
50
``
`-
def tearDown(self):
`
51
``
`-
self.t = None
`
52
``
-
53
50
`def do_blocking_test(self, block_func, block_args, trigger_func, trigger_args):
`
54
``
`-
self.t = _TriggerThread(trigger_func, trigger_args)
`
55
``
`-
self.t.start()
`
56
``
`-
self.result = block_func(*block_args)
`
57
``
`-
If block_func returned before our thread made the call, we failed!
`
58
``
`-
if not self.t.startedEvent.is_set():
`
59
``
`-
self.fail("blocking function '%r' appeared not to block" %
`
60
``
`-
block_func)
`
61
``
`-
self.t.join(10) # make sure the thread terminates
`
62
``
`-
if self.t.is_alive():
`
63
``
`-
self.fail("trigger function '%r' appeared to not return" %
`
64
``
`-
trigger_func)
`
65
``
`-
return self.result
`
``
51
`+
thread = _TriggerThread(trigger_func, trigger_args)
`
``
52
`+
thread.start()
`
``
53
`+
try:
`
``
54
`+
self.result = block_func(*block_args)
`
``
55
`+
If block_func returned before our thread made the call, we failed!
`
``
56
`+
if not thread.startedEvent.is_set():
`
``
57
`+
self.fail("blocking function '%r' appeared not to block" %
`
``
58
`+
block_func)
`
``
59
`+
return self.result
`
``
60
`+
finally:
`
``
61
`+
thread.join(10) # make sure the thread terminates
`
``
62
`+
if thread.is_alive():
`
``
63
`+
self.fail("trigger function '%r' appeared to not return" %
`
``
64
`+
trigger_func)
`
66
65
``
67
66
`# Call this instead if block_func is supposed to raise an exception.
`
68
67
`def do_exceptional_blocking_test(self,block_func, block_args, trigger_func,
`
69
68
`trigger_args, expected_exception_class):
`
70
``
`-
self.t = _TriggerThread(trigger_func, trigger_args)
`
71
``
`-
self.t.start()
`
``
69
`+
thread = _TriggerThread(trigger_func, trigger_args)
`
``
70
`+
thread.start()
`
72
71
`try:
`
73
72
`try:
`
74
73
`block_func(*block_args)
`
`@@ -78,11 +77,11 @@ def do_exceptional_blocking_test(self,block_func, block_args, trigger_func,
`
78
77
`self.fail("expected exception of kind %r" %
`
79
78
`expected_exception_class)
`
80
79
`finally:
`
81
``
`-
self.t.join(10) # make sure the thread terminates
`
82
``
`-
if self.t.is_alive():
`
``
80
`+
thread.join(10) # make sure the thread terminates
`
``
81
`+
if thread.is_alive():
`
83
82
`self.fail("trigger function '%r' appeared to not return" %
`
84
83
`trigger_func)
`
85
``
`-
if not self.t.startedEvent.is_set():
`
``
84
`+
if not thread.startedEvent.is_set():
`
86
85
`self.fail("trigger thread ended but event never set")
`
87
86
``
88
87
``
`@@ -160,8 +159,11 @@ def worker(self, q):
`
160
159
``
161
160
`def queue_join_test(self, q):
`
162
161
`self.cum = 0
`
``
162
`+
threads = []
`
163
163
`for i in (0,1):
`
164
``
`-
threading.Thread(target=self.worker, args=(q,)).start()
`
``
164
`+
thread = threading.Thread(target=self.worker, args=(q,))
`
``
165
`+
thread.start()
`
``
166
`+
threads.append(thread)
`
165
167
`for i in range(100):
`
166
168
`q.put(i)
`
167
169
`q.join()
`
`@@ -170,6 +172,8 @@ def queue_join_test(self, q):
`
170
172
`for i in (0,1):
`
171
173
`q.put(-1) # instruct the threads to close
`
172
174
`q.join() # verify that you can join twice
`
``
175
`+
for thread in threads:
`
``
176
`+
thread.join()
`
173
177
``
174
178
`def test_queue_task_done(self):
`
175
179
`# Test to make sure a queue task completed successfully.
`