| 
									
										
										
										
											2008-03-18 01:50:25 +00:00
										 |  |  | from test import test_support | 
					
						
							|  |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2002-12-30 22:30:22 +00:00
										 |  |  | import dummy_threading as _threading | 
					
						
							|  |  |  | import time | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-18 01:50:25 +00:00
										 |  |  | class DummyThreadingTestCase(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class TestThread(_threading.Thread): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def run(self): | 
					
						
							|  |  |  |             global running | 
					
						
							|  |  |  |             global sema | 
					
						
							|  |  |  |             global mutex | 
					
						
							|  |  |  |             # Uncomment if testing another module, such as the real 'threading' | 
					
						
							|  |  |  |             # module. | 
					
						
							|  |  |  |             #delay = random.random() * 2 | 
					
						
							|  |  |  |             delay = 0 | 
					
						
							|  |  |  |             if test_support.verbose: | 
					
						
							|  |  |  |                 print 'task', self.getName(), 'will run for', delay, 'sec' | 
					
						
							|  |  |  |             sema.acquire() | 
					
						
							|  |  |  |             mutex.acquire() | 
					
						
							|  |  |  |             running += 1 | 
					
						
							|  |  |  |             if test_support.verbose: | 
					
						
							|  |  |  |                 print running, 'tasks are running' | 
					
						
							|  |  |  |             mutex.release() | 
					
						
							|  |  |  |             time.sleep(delay) | 
					
						
							|  |  |  |             if test_support.verbose: | 
					
						
							|  |  |  |                 print 'task', self.getName(), 'done' | 
					
						
							|  |  |  |             mutex.acquire() | 
					
						
							|  |  |  |             running -= 1 | 
					
						
							|  |  |  |             if test_support.verbose: | 
					
						
							|  |  |  |                 print self.getName(), 'is finished.', running, 'tasks are running' | 
					
						
							|  |  |  |             mutex.release() | 
					
						
							|  |  |  |             sema.release() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.numtasks = 10 | 
					
						
							|  |  |  |         global sema | 
					
						
							|  |  |  |         sema = _threading.BoundedSemaphore(value=3) | 
					
						
							|  |  |  |         global mutex | 
					
						
							|  |  |  |         mutex = _threading.RLock() | 
					
						
							| 
									
										
										
										
											2002-12-30 22:30:22 +00:00
										 |  |  |         global running | 
					
						
							| 
									
										
										
										
											2008-03-18 01:50:25 +00:00
										 |  |  |         running = 0 | 
					
						
							|  |  |  |         self.threads = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_tasks(self): | 
					
						
							|  |  |  |         for i in range(self.numtasks): | 
					
						
							|  |  |  |             t = self.TestThread(name="<thread %d>"%i) | 
					
						
							|  |  |  |             self.threads.append(t) | 
					
						
							|  |  |  |             t.start() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if test_support.verbose: | 
					
						
							|  |  |  |             print 'waiting for all tasks to complete' | 
					
						
							|  |  |  |         for t in self.threads: | 
					
						
							|  |  |  |             t.join() | 
					
						
							|  |  |  |         if test_support.verbose: | 
					
						
							|  |  |  |             print 'all tasks done' | 
					
						
							| 
									
										
										
										
											2002-12-30 22:30:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def test_main(): | 
					
						
							| 
									
										
										
										
											2008-03-18 01:50:25 +00:00
										 |  |  |     test_support.run_unittest(DummyThreadingTestCase) | 
					
						
							| 
									
										
										
										
											2002-12-30 22:30:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     test_main() |