from sys import monitoring
from test.support import threading_helper
-from threading import Thread, _PyRLock
+from threading import Thread, _PyRLock, Barrier
from unittest import TestCase
return n
return self.work(n - 1, funcs) + self.work(n - 2, funcs)
- def start_work(self, n, funcs):
+ def start_work(self, n, funcs, barrier):
# With the GIL builds we need to make sure that the hooks have
# a chance to run as it's possible to run w/o releasing the GIL.
- time.sleep(0.1)
+ barrier.wait()
self.work(n, funcs)
def after_test(self):
exec("def f(): pass", x)
funcs.append(x["f"])
+ barrier = Barrier(self.thread_count + 1)
threads = []
for i in range(self.thread_count):
# Each thread gets a copy of the func list to avoid contention
- t = Thread(target=self.start_work, args=(self.fib, list(funcs)))
+ t = Thread(target=self.start_work, args=(self.fib, list(funcs), barrier))
t.start()
threads.append(t)
self.after_threads()
+ barrier.wait()
while True:
any_alive = False
def setUp(self):
super().setUp()
self.set = False
- self.called = False
monitoring.register_callback(
self.tool_id, monitoring.events.LINE, self.callback
)
super().tearDown()
def callback(self, *args):
- self.called = True
-
- def after_test(self):
- self.assertTrue(self.called)
+ pass
def during_threads(self):
if self.set:
def setUp(self):
self.set = False
- self.called = False
-
- def after_test(self):
- self.assertTrue(self.called)
def tearDown(self):
sys.settrace(None)
def trace_func(self, frame, event, arg):
- self.called = True
return self.trace_func
def during_threads(self):
def setUp(self):
self.set = False
- self.called = False
-
- def after_test(self):
- self.assertTrue(self.called)
def tearDown(self):
sys.setprofile(None)
def trace_func(self, frame, event, arg):
- self.called = True
return self.trace_func
def during_threads(self):
def setUp(self):
self.set = False
- self.called = False
-
- def after_test(self):
- self.assertTrue(self.called)
def tearDown(self):
threading.setprofile_all_threads(None)
def trace_func(self, frame, event, arg):
- self.called = True
return self.trace_func
def during_threads(self):