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", "", "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()