mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			62 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import unittest | ||
|  | 
 | ||
|  | import threading | ||
|  | from threading import Thread | ||
|  | from unittest import TestCase | ||
|  | import gc | ||
|  | 
 | ||
|  | from test.support import threading_helper | ||
|  | 
 | ||
|  | 
 | ||
|  | class MyObj: | ||
|  |     pass | ||
|  | 
 | ||
|  | 
 | ||
|  | @threading_helper.requires_working_threading() | ||
|  | class TestGC(TestCase): | ||
|  |     def test_get_objects(self): | ||
|  |         event = threading.Event() | ||
|  | 
 | ||
|  |         def gc_thread(): | ||
|  |             for i in range(100): | ||
|  |                 o = gc.get_objects() | ||
|  |             event.set() | ||
|  | 
 | ||
|  |         def mutator_thread(): | ||
|  |             while not event.is_set(): | ||
|  |                 o1 = MyObj() | ||
|  |                 o2 = MyObj() | ||
|  |                 o3 = MyObj() | ||
|  |                 o4 = MyObj() | ||
|  | 
 | ||
|  |         gcs = [Thread(target=gc_thread)] | ||
|  |         mutators = [Thread(target=mutator_thread) for _ in range(4)] | ||
|  |         with threading_helper.start_threads(gcs + mutators): | ||
|  |             pass | ||
|  | 
 | ||
|  |     def test_get_referrers(self): | ||
|  |         event = threading.Event() | ||
|  | 
 | ||
|  |         obj = MyObj() | ||
|  | 
 | ||
|  |         def gc_thread(): | ||
|  |             for i in range(100): | ||
|  |                 o = gc.get_referrers(obj) | ||
|  |             event.set() | ||
|  | 
 | ||
|  |         def mutator_thread(): | ||
|  |             while not event.is_set(): | ||
|  |                 d1 = { "key": obj } | ||
|  |                 d2 = { "key": obj } | ||
|  |                 d3 = { "key": obj } | ||
|  |                 d4 = { "key": obj } | ||
|  | 
 | ||
|  |         gcs = [Thread(target=gc_thread) for _ in range(2)] | ||
|  |         mutators = [Thread(target=mutator_thread) for _ in range(4)] | ||
|  |         with threading_helper.start_threads(gcs + mutators): | ||
|  |             pass | ||
|  | 
 | ||
|  | 
 | ||
|  | if __name__ == "__main__": | ||
|  |     unittest.main() |