blob: 6ec5da3835aea6613d4c13d0e13cb56248ef454b [file] [log] [blame]
Benjamin Petersonee8712c2008-05-20 21:35:26 +00001from test import support
Christian Heimesb186d002008-03-18 15:15:01 +00002import unittest
Guido van Rossumad50ca92002-12-30 22:30:22 +00003import dummy_threading as _threading
4import time
5
Christian Heimesb186d002008-03-18 15:15:01 +00006class DummyThreadingTestCase(unittest.TestCase):
Guido van Rossumad50ca92002-12-30 22:30:22 +00007
Christian Heimesb186d002008-03-18 15:15:01 +00008 class TestThread(_threading.Thread):
Tim Petersf2715e02003-02-19 02:35:07 +00009
Christian Heimesb186d002008-03-18 15:15:01 +000010 def run(self):
11 global running
12 global sema
13 global mutex
14 # Uncomment if testing another module, such as the real 'threading'
15 # module.
16 #delay = random.random() * 2
17 delay = 0
Benjamin Petersonee8712c2008-05-20 21:35:26 +000018 if support.verbose:
Benjamin Peterson72753702008-08-18 18:09:21 +000019 print('task', self.name, 'will run for', delay, 'sec')
Christian Heimesb186d002008-03-18 15:15:01 +000020 sema.acquire()
21 mutex.acquire()
22 running += 1
Benjamin Petersonee8712c2008-05-20 21:35:26 +000023 if support.verbose:
Christian Heimesb186d002008-03-18 15:15:01 +000024 print(running, 'tasks are running')
25 mutex.release()
26 time.sleep(delay)
Benjamin Petersonee8712c2008-05-20 21:35:26 +000027 if support.verbose:
Benjamin Peterson72753702008-08-18 18:09:21 +000028 print('task', self.name, 'done')
Christian Heimesb186d002008-03-18 15:15:01 +000029 mutex.acquire()
30 running -= 1
Benjamin Petersonee8712c2008-05-20 21:35:26 +000031 if support.verbose:
Benjamin Peterson72753702008-08-18 18:09:21 +000032 print(self.name, 'is finished.', running, 'tasks are running')
Christian Heimesb186d002008-03-18 15:15:01 +000033 mutex.release()
34 sema.release()
35
36 def setUp(self):
37 self.numtasks = 10
38 global sema
39 sema = _threading.BoundedSemaphore(value=3)
40 global mutex
41 mutex = _threading.RLock()
Guido van Rossumad50ca92002-12-30 22:30:22 +000042 global running
Christian Heimesb186d002008-03-18 15:15:01 +000043 running = 0
44 self.threads = []
Guido van Rossumad50ca92002-12-30 22:30:22 +000045
Christian Heimesb186d002008-03-18 15:15:01 +000046 def test_tasks(self):
47 for i in range(self.numtasks):
48 t = self.TestThread(name="<thread %d>"%i)
49 self.threads.append(t)
50 t.start()
Guido van Rossumad50ca92002-12-30 22:30:22 +000051
Benjamin Petersonee8712c2008-05-20 21:35:26 +000052 if support.verbose:
Christian Heimesb186d002008-03-18 15:15:01 +000053 print('waiting for all tasks to complete')
54 for t in self.threads:
55 t.join()
Benjamin Petersonee8712c2008-05-20 21:35:26 +000056 if support.verbose:
Christian Heimesb186d002008-03-18 15:15:01 +000057 print('all tasks done')
Guido van Rossumad50ca92002-12-30 22:30:22 +000058
59def test_main():
Benjamin Petersonee8712c2008-05-20 21:35:26 +000060 support.run_unittest(DummyThreadingTestCase)
Guido van Rossumad50ca92002-12-30 22:30:22 +000061
62
63if __name__ == '__main__':
64 test_main()