Example #1
0
def python_entry_point(source_code: str):
    inperpreter = code.InteractiveInterpreter()
    inperpreter.runsource(source_code)
    inperpreter.runcode(code.compile_command(source_code))

    console = code.InteractiveConsole()
    console.push(source_code)

    test.support.run_in_subinterp(source_code)
    _testcapi.run_in_subinterp(source_code)
    _xxsubinterpreters.run_string(source_code)
Example #2
0
    def test_threads_join_2(self):
        # Same as above, but a delay gets introduced after the thread's
        # Python code returned but before the thread state is deleted.
        # To achieve this, we register a thread-local object which sleeps
        # a bit when deallocated.
        r, w = os.pipe()
        self.addCleanup(os.close, r)
        self.addCleanup(os.close, w)
        code = r"""if 1:
            import os
            import threading
            import time

            class Sleeper:
                def __del__(self):
                    time.sleep(0.05)

            tls = threading.local()

            def f():
                # Sleep a bit so that the thread is still running when
                # Py_EndInterpreter is called.
                time.sleep(0.05)
                tls.x = Sleeper()
                os.write(%d, b"x")
            threading.Thread(target=f).start()
            """ % (w,)
        ret = _testcapi.run_in_subinterp(code)
        self.assertEqual(ret, 0)
        # The thread was joined properly.
        self.assertEqual(os.read(r, 1), b"x")
Example #3
0
    def test_threads_join_2(self):
        # Same as above, but a delay gets introduced after the thread's
        # Python code returned but before the thread state is deleted.
        # To achieve this, we register a thread-local object which sleeps
        # a bit when deallocated.
        r, w = os.pipe()
        self.addCleanup(os.close, r)
        self.addCleanup(os.close, w)
        code = r"""if 1:
            import os
            import threading
            import time

            class Sleeper:
                def __del__(self):
                    time.sleep(0.05)

            tls = threading.local()

            def f():
                # Sleep a bit so that the thread is still running when
                # Py_EndInterpreter is called.
                time.sleep(0.05)
                tls.x = Sleeper()
                os.write(%d, b"x")
            threading.Thread(target=f).start()
            """ % (w, )
        ret = _testcapi.run_in_subinterp(code)
        self.assertEqual(ret, 0)
        # The thread was joined properly.
        self.assertEqual(os.read(r, 1), b"x")
Example #4
0
 def test_subinterps(self):
     import builtins
     r, w = os.pipe()
     code = """if 1:
         import sys, builtins, pickle
         with open({:d}, "wb") as f:
             pickle.dump(id(sys.modules), f)
             pickle.dump(id(builtins), f)
         """.format(w)
     with open(r, "rb") as f:
         ret = _testcapi.run_in_subinterp(code)
         self.assertEqual(ret, 0)
         self.assertNotEqual(pickle.load(f), id(sys.modules))
         self.assertNotEqual(pickle.load(f), id(builtins))
Example #5
0
 def test_subinterps(self):
     import builtins
     r, w = os.pipe()
     code = """if 1:
         import sys, builtins, pickle
         with open({:d}, "wb") as f:
             pickle.dump(id(sys.modules), f)
             pickle.dump(id(builtins), f)
         """.format(w)
     with open(r, "rb") as f:
         ret = _testcapi.run_in_subinterp(code)
         self.assertEqual(ret, 0)
         self.assertNotEqual(pickle.load(f), id(sys.modules))
         self.assertNotEqual(pickle.load(f), id(builtins))
Example #6
0
 def test_callbacks_leak_refcycle(self):
     # Similar to the above, but with a refcycle through the atexit
     # module.
     n = atexit._ncallbacks()
     code = r"""if 1:
         import atexit
         def f():
             pass
         atexit.register(f)
         atexit.__atexit = atexit
         """
     ret = _testcapi.run_in_subinterp(code)
     self.assertEqual(ret, 0)
     self.assertEqual(atexit._ncallbacks(), n)
Example #7
0
 def test_callbacks_leak_refcycle(self):
     # Similar to the above, but with a refcycle through the atexit
     # module.
     n = atexit._ncallbacks()
     code = r"""if 1:
         import atexit
         def f():
             pass
         atexit.register(f)
         atexit.__atexit = atexit
         """
     ret = _testcapi.run_in_subinterp(code)
     self.assertEqual(ret, 0)
     self.assertEqual(atexit._ncallbacks(), n)
Example #8
0
 def test_callbacks_leak(self):
     # This test shows a leak in refleak mode if atexit doesn't
     # take care to free callbacks in its per-subinterpreter module
     # state.
     n = atexit._ncallbacks()
     code = r"""if 1:
         import atexit
         def f():
             pass
         atexit.register(f)
         del atexit
         """
     ret = _testcapi.run_in_subinterp(code)
     self.assertEqual(ret, 0)
     self.assertEqual(atexit._ncallbacks(), n)
Example #9
0
 def test_callbacks_leak(self):
     # This test shows a leak in refleak mode if atexit doesn't
     # take care to free callbacks in its per-subinterpreter module
     # state.
     n = atexit._ncallbacks()
     code = r"""if 1:
         import atexit
         def f():
             pass
         atexit.register(f)
         del atexit
         """
     ret = _testcapi.run_in_subinterp(code)
     self.assertEqual(ret, 0)
     self.assertEqual(atexit._ncallbacks(), n)
Example #10
0
 def test_subinterp(self):
     # bpo-42846: Test a CJK codec in a subinterpreter
     import _testcapi
     encoding = 'cp932'
     text = "Python の開発は、1990 年ごろから開始されています。"
     code = textwrap.dedent("""
         import codecs
         encoding = %r
         text = %r
         encoder = codecs.getincrementalencoder(encoding)()
         text2 = encoder.encode(text).decode(encoding)
         if text2 != text:
             raise ValueError(f"encoding issue: {text2!a} != {text!a}")
     """) % (encoding, text)
     res = _testcapi.run_in_subinterp(code)
     self.assertEqual(res, 0)
Example #11
0
    def test_threads_join(self):
        # Non-daemon threads should be joined at subinterpreter shutdown
        # (issue #18808)
        r, w = os.pipe()
        self.addCleanup(os.close, r)
        self.addCleanup(os.close, w)
        code = r"""if 1:
            import os
            import threading
            import time

            def f():
                # Sleep a bit so that the thread is still running when
                # Py_EndInterpreter is called.
                time.sleep(0.05)
                os.write(%d, b"x")
            threading.Thread(target=f).start()
            """ % (w, )
        ret = _testcapi.run_in_subinterp(code)
        self.assertEqual(ret, 0)
        # The thread was joined properly.
        self.assertEqual(os.read(r, 1), b"x")
Example #12
0
    def test_threads_join(self):
        # Non-daemon threads should be joined at subinterpreter shutdown
        # (issue #18808)
        r, w = os.pipe()
        self.addCleanup(os.close, r)
        self.addCleanup(os.close, w)
        code = r"""if 1:
            import os
            import threading
            import time

            def f():
                # Sleep a bit so that the thread is still running when
                # Py_EndInterpreter is called.
                time.sleep(0.05)
                os.write(%d, b"x")
            threading.Thread(target=f).start()
            """ % (w,)
        ret = _testcapi.run_in_subinterp(code)
        self.assertEqual(ret, 0)
        # The thread was joined properly.
        self.assertEqual(os.read(r, 1), b"x")
Example #13
0
 def run_payload(payload: str) -> None:
     _testcapi.run_in_subinterp(payload)