mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			31 lines
		
	
	
	
		
			912 B
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			31 lines
		
	
	
	
		
			912 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import unittest
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from threading import Thread
							 | 
						||
| 
								 | 
							
								from unittest import TestCase
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from test.support import threading_helper
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@threading_helper.requires_working_threading()
							 | 
						||
| 
								 | 
							
								class TestCode(TestCase):
							 | 
						||
| 
								 | 
							
								    def test_code_attrs(self):
							 | 
						||
| 
								 | 
							
								        """Test concurrent accesses to lazily initialized code attributes"""
							 | 
						||
| 
								 | 
							
								        code_objects = []
							 | 
						||
| 
								 | 
							
								        for _ in range(1000):
							 | 
						||
| 
								 | 
							
								            code_objects.append(compile("a + b", "<string>", "eval"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        def run_in_thread():
							 | 
						||
| 
								 | 
							
								            for code in code_objects:
							 | 
						||
| 
								 | 
							
								                self.assertIsInstance(code.co_code, bytes)
							 | 
						||
| 
								 | 
							
								                self.assertIsInstance(code.co_freevars, tuple)
							 | 
						||
| 
								 | 
							
								                self.assertIsInstance(code.co_varnames, tuple)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        threads = [Thread(target=run_in_thread) for _ in range(2)]
							 | 
						||
| 
								 | 
							
								        for thread in threads:
							 | 
						||
| 
								 | 
							
								            thread.start()
							 | 
						||
| 
								 | 
							
								        for thread in threads:
							 | 
						||
| 
								 | 
							
								            thread.join()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if __name__ == "__main__":
							 | 
						||
| 
								 | 
							
								    unittest.main()
							 |