]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-76785: Rename _xxsubinterpreters to _interpreters (gh-117791)
authorEric Snow <ericsnowcurrently@gmail.com>
Wed, 24 Apr 2024 16:18:24 +0000 (10:18 -0600)
committerGitHub <noreply@github.com>
Wed, 24 Apr 2024 16:18:24 +0000 (16:18 +0000)
See https://discuss.python.org/t/pep-734-multiple-interpreters-in-the-stdlib/41147/26.

34 files changed:
Include/internal/pycore_atexit.h
Include/internal/pycore_pybuffer.h
Include/internal/pycore_pystate.h
Include/internal/pycore_pythread.h
Lib/test/support/import_helper.py
Lib/test/support/interpreters/__init__.py
Lib/test/support/interpreters/channels.py
Lib/test/support/interpreters/queues.py
Lib/test/test__interpchannels.py [moved from Lib/test/test__xxinterpchannels.py with 68% similarity]
Lib/test/test__interpreters.py [moved from Lib/test/test__xxsubinterpreters.py with 98% similarity]
Lib/test/test_capi/test_misc.py
Lib/test/test_import/__init__.py
Lib/test/test_importlib/test_util.py
Lib/test/test_interpreters/test_api.py
Lib/test/test_interpreters/test_channels.py
Lib/test/test_interpreters/test_lifecycle.py
Lib/test/test_interpreters/test_queues.py
Lib/test/test_interpreters/test_stress.py
Lib/test/test_interpreters/utils.py
Makefile.pre.in
Misc/NEWS.d/next/Library/2024-04-11-18-11-37.gh-issue-76785.BWNkhC.rst [new file with mode: 0644]
Modules/Setup
Modules/Setup.stdlib.in
Modules/_interpchannelsmodule.c [moved from Modules/_xxinterpchannelsmodule.c with 99% similarity]
Modules/_interpqueuesmodule.c [moved from Modules/_xxinterpqueuesmodule.c with 99% similarity]
Modules/_interpretersmodule.c [moved from Modules/_xxsubinterpretersmodule.c with 99% similarity]
PC/config.c
PCbuild/pythoncore.vcxproj
PCbuild/pythoncore.vcxproj.filters
Python/stdlib_module_names.h
Tools/build/generate_stdlib_module_names.py
Tools/c-analyzer/cpython/ignored.tsv
configure
configure.ac

index 4dcda8f517c787315e294f53941f216f9d8fda01..507a5c03cbc792904a6a1b8cd95f9366022acbdd 100644 (file)
@@ -54,7 +54,7 @@ struct atexit_state {
     int callback_len;
 };
 
-// Export for '_xxinterpchannels' shared extension
+// Export for '_interpchannels' shared extension
 PyAPI_FUNC(int) _Py_AtExit(
     PyInterpreterState *interp,
     atexit_datacallbackfunc func,
index 3cbc290b2ea3ee566a08411cb1752b86ab7324bd..9439d2bd770587d6c22620635254cfa5bf727b40 100644 (file)
@@ -9,7 +9,7 @@ extern "C" {
 #endif
 
 
-// Exported for the _xxinterpchannels module.
+// Exported for the _interpchannels module.
 PyAPI_FUNC(int) _PyBuffer_ReleaseInInterpreter(
         PyInterpreterState *interp, Py_buffer *view);
 PyAPI_FUNC(int) _PyBuffer_ReleaseInInterpreterAndRawFree(
index eb5b5fee59009cf2af7e8e41e11f4e6c4fe472bb..a668d78b969bd9365d4d311c0b9be9187bf2c677 100644 (file)
@@ -77,10 +77,10 @@ _Py_IsMainInterpreterFinalizing(PyInterpreterState *interp)
             interp == &_PyRuntime._main_interpreter);
 }
 
-// Export for _xxsubinterpreters module.
+// Export for _interpreters module.
 PyAPI_FUNC(PyObject *) _PyInterpreterState_GetIDObject(PyInterpreterState *);
 
-// Export for _xxsubinterpreters module.
+// Export for _interpreters module.
 PyAPI_FUNC(int) _PyInterpreterState_SetRunningMain(PyInterpreterState *);
 PyAPI_FUNC(void) _PyInterpreterState_SetNotRunningMain(PyInterpreterState *);
 PyAPI_FUNC(int) _PyInterpreterState_IsRunningMain(PyInterpreterState *);
index f032cb973886572398ba97055eabf33044896880..3610c6254db6af36e8dc1f7e485f7b8ad595e35d 100644 (file)
@@ -99,7 +99,7 @@ extern void _PyThread_AfterFork(struct _pythread_runtime_state *state);
 // unset: -1 seconds, in nanoseconds
 #define PyThread_UNSET_TIMEOUT ((PyTime_t)(-1 * 1000 * 1000 * 1000))
 
-// Exported for the _xxinterpchannels module.
+// Exported for the _interpchannels module.
 PyAPI_FUNC(int) PyThread_ParseTimeoutArg(
     PyObject *arg,
     int blocking,
@@ -111,7 +111,7 @@ PyAPI_FUNC(int) PyThread_ParseTimeoutArg(
  * are returned, depending on whether the lock can be acquired within the
  * timeout.
  */
-// Exported for the _xxinterpchannels module.
+// Exported for the _interpchannels module.
 PyAPI_FUNC(PyLockStatus) PyThread_acquire_lock_timed_with_retries(
     PyThread_type_lock,
     PY_TIMEOUT_T microseconds);
index 29c6f535b40342539adf229d66aceeeee45d1c98..edcd2b9a35bbd9d48a31808f79165382430b66bb 100644 (file)
@@ -114,7 +114,7 @@ def multi_interp_extensions_check(enabled=True):
     This only applies to modules that haven't been imported yet.
     It overrides the PyInterpreterConfig.check_multi_interp_extensions
     setting (see support.run_in_subinterp_with_config() and
-    _xxsubinterpreters.create()).
+    _interpreters.create()).
 
     Also see importlib.utils.allowing_all_extensions().
     """
index 0a5a9259479be4711a803bc0a51e6ecda08e38c8..e067f259364d2aa80e13c1cc63525dd1fc492ee3 100644 (file)
@@ -2,10 +2,10 @@
 
 import threading
 import weakref
-import _xxsubinterpreters as _interpreters
+import _interpreters
 
 # aliases:
-from _xxsubinterpreters import (
+from _interpreters import (
     InterpreterError, InterpreterNotFoundError, NotShareableError,
     is_shareable,
 )
index f7f523b1fc5a778a8391b7e0efdbdb25e8cffad1..fbae7e634cf34d1d11c13740b25f55ed50364ec4 100644 (file)
@@ -1,10 +1,10 @@
 """Cross-interpreter Channels High Level Module."""
 
 import time
-import _xxinterpchannels as _channels
+import _interpchannels as _channels
 
 # aliases:
-from _xxinterpchannels import (
+from _interpchannels import (
     ChannelError, ChannelNotFoundError, ChannelClosedError,
     ChannelEmptyError, ChannelNotEmptyError,
 )
index 5849a1cc15e44758d914e59f0c997df9d9fbca47..1b9e7481f2e313d0124952803a98c3a884b049f2 100644 (file)
@@ -4,10 +4,10 @@ import pickle
 import queue
 import time
 import weakref
-import _xxinterpqueues as _queues
+import _interpqueues as _queues
 
 # aliases:
-from _xxinterpqueues import (
+from _interpqueues import (
     QueueError, QueueNotFoundError,
 )
 
similarity index 68%
rename from Lib/test/test__xxinterpchannels.py
rename to Lib/test/test__interpchannels.py
index 3db0cb7e6e1d49d351e0c8360a3d596fcebbbcaf..b76c58917c0b9c39821719468f02999d48ec446e 100644 (file)
@@ -8,14 +8,14 @@ import unittest
 
 from test.support import import_helper
 
-from test.test__xxsubinterpreters import (
+from test.test__interpreters import (
     _interpreters,
     _run_output,
     clean_up_interpreters,
 )
 
 
-channels = import_helper.import_module('_xxinterpchannels')
+_channels = import_helper.import_module('_interpchannels')
 
 
 # Additional tests are found in Lib/test/test_interpreters/test_channels.py.
@@ -29,8 +29,8 @@ channels = import_helper.import_module('_xxinterpchannels')
 def recv_wait(cid):
     while True:
         try:
-            return channels.recv(cid)
-        except channels.ChannelEmptyError:
+            return _channels.recv(cid)
+        except _channels.ChannelEmptyError:
             time.sleep(0.1)
 
 #@contextmanager
@@ -101,7 +101,7 @@ class Interpreter(namedtuple('Interpreter', 'name id')):
 def expect_channel_closed():
     try:
         yield
-    except channels.ChannelClosedError:
+    except _channels.ChannelClosedError:
         pass
     else:
         assert False, 'channel not closed'
@@ -188,7 +188,7 @@ def run_action(cid, action, end, state, *, hideclosed=True):
 
     try:
         result = _run_action(cid, action, end, state)
-    except channels.ChannelClosedError:
+    except _channels.ChannelClosedError:
         if not hideclosed and not expectfail:
             raise
         result = state.close()
@@ -201,18 +201,18 @@ def run_action(cid, action, end, state, *, hideclosed=True):
 def _run_action(cid, action, end, state):
     if action == 'use':
         if end == 'send':
-            channels.send(cid, b'spam', blocking=False)
+            _channels.send(cid, b'spam', blocking=False)
             return state.incr()
         elif end == 'recv':
             if not state.pending:
                 try:
-                    channels.recv(cid)
-                except channels.ChannelEmptyError:
+                    _channels.recv(cid)
+                except _channels.ChannelEmptyError:
                     return state
                 else:
                     raise Exception('expected ChannelEmptyError')
             else:
-                channels.recv(cid)
+                _channels.recv(cid)
                 return state.decr()
         else:
             raise ValueError(end)
@@ -220,7 +220,7 @@ def _run_action(cid, action, end, state):
         kwargs = {}
         if end in ('recv', 'send'):
             kwargs[end] = True
-        channels.close(cid, **kwargs)
+        _channels.close(cid, **kwargs)
         return state.close()
     elif action == 'force-close':
         kwargs = {
@@ -228,17 +228,17 @@ def _run_action(cid, action, end, state):
             }
         if end in ('recv', 'send'):
             kwargs[end] = True
-        channels.close(cid, **kwargs)
+        _channels.close(cid, **kwargs)
         return state.close(force=True)
     else:
         raise ValueError(action)
 
 
 def clean_up_channels():
-    for cid in channels.list_all():
+    for cid in _channels.list_all():
         try:
-            channels.destroy(cid)
-        except channels.ChannelNotFoundError:
+            _channels.destroy(cid)
+        except _channels.ChannelNotFoundError:
             pass  # already destroyed
 
 
@@ -255,25 +255,25 @@ class TestBase(unittest.TestCase):
 class ChannelIDTests(TestBase):
 
     def test_default_kwargs(self):
-        cid = channels._channel_id(10, force=True)
+        cid = _channels._channel_id(10, force=True)
 
         self.assertEqual(int(cid), 10)
         self.assertEqual(cid.end, 'both')
 
     def test_with_kwargs(self):
-        cid = channels._channel_id(10, send=True, force=True)
+        cid = _channels._channel_id(10, send=True, force=True)
         self.assertEqual(cid.end, 'send')
 
-        cid = channels._channel_id(10, send=True, recv=False, force=True)
+        cid = _channels._channel_id(10, send=True, recv=False, force=True)
         self.assertEqual(cid.end, 'send')
 
-        cid = channels._channel_id(10, recv=True, force=True)
+        cid = _channels._channel_id(10, recv=True, force=True)
         self.assertEqual(cid.end, 'recv')
 
-        cid = channels._channel_id(10, recv=True, send=False, force=True)
+        cid = _channels._channel_id(10, recv=True, send=False, force=True)
         self.assertEqual(cid.end, 'recv')
 
-        cid = channels._channel_id(10, send=True, recv=True, force=True)
+        cid = _channels._channel_id(10, send=True, recv=True, force=True)
         self.assertEqual(cid.end, 'both')
 
     def test_coerce_id(self):
@@ -281,47 +281,47 @@ class ChannelIDTests(TestBase):
             def __index__(self):
                 return 10
 
-        cid = channels._channel_id(Int(), force=True)
+        cid = _channels._channel_id(Int(), force=True)
         self.assertEqual(int(cid), 10)
 
     def test_bad_id(self):
-        self.assertRaises(TypeError, channels._channel_id, object())
-        self.assertRaises(TypeError, channels._channel_id, 10.0)
-        self.assertRaises(TypeError, channels._channel_id, '10')
-        self.assertRaises(TypeError, channels._channel_id, b'10')
-        self.assertRaises(ValueError, channels._channel_id, -1)
-        self.assertRaises(OverflowError, channels._channel_id, 2**64)
+        self.assertRaises(TypeError, _channels._channel_id, object())
+        self.assertRaises(TypeError, _channels._channel_id, 10.0)
+        self.assertRaises(TypeError, _channels._channel_id, '10')
+        self.assertRaises(TypeError, _channels._channel_id, b'10')
+        self.assertRaises(ValueError, _channels._channel_id, -1)
+        self.assertRaises(OverflowError, _channels._channel_id, 2**64)
 
     def test_bad_kwargs(self):
         with self.assertRaises(ValueError):
-            channels._channel_id(10, send=False, recv=False)
+            _channels._channel_id(10, send=False, recv=False)
 
     def test_does_not_exist(self):
-        cid = channels.create()
-        with self.assertRaises(channels.ChannelNotFoundError):
-            channels._channel_id(int(cid) + 1)  # unforced
+        cid = _channels.create()
+        with self.assertRaises(_channels.ChannelNotFoundError):
+            _channels._channel_id(int(cid) + 1)  # unforced
 
     def test_str(self):
-        cid = channels._channel_id(10, force=True)
+        cid = _channels._channel_id(10, force=True)
         self.assertEqual(str(cid), '10')
 
     def test_repr(self):
-        cid = channels._channel_id(10, force=True)
+        cid = _channels._channel_id(10, force=True)
         self.assertEqual(repr(cid), 'ChannelID(10)')
 
-        cid = channels._channel_id(10, send=True, force=True)
+        cid = _channels._channel_id(10, send=True, force=True)
         self.assertEqual(repr(cid), 'ChannelID(10, send=True)')
 
-        cid = channels._channel_id(10, recv=True, force=True)
+        cid = _channels._channel_id(10, recv=True, force=True)
         self.assertEqual(repr(cid), 'ChannelID(10, recv=True)')
 
-        cid = channels._channel_id(10, send=True, recv=True, force=True)
+        cid = _channels._channel_id(10, send=True, recv=True, force=True)
         self.assertEqual(repr(cid), 'ChannelID(10)')
 
     def test_equality(self):
-        cid1 = channels.create()
-        cid2 = channels._channel_id(int(cid1))
-        cid3 = channels.create()
+        cid1 = _channels.create()
+        cid2 = _channels._channel_id(int(cid1))
+        cid3 = _channels.create()
 
         self.assertTrue(cid1 == cid1)
         self.assertTrue(cid1 == cid2)
@@ -341,11 +341,11 @@ class ChannelIDTests(TestBase):
         self.assertTrue(cid1 != cid3)
 
     def test_shareable(self):
-        chan = channels.create()
+        chan = _channels.create()
 
-        obj = channels.create()
-        channels.send(chan, obj, blocking=False)
-        got = channels.recv(chan)
+        obj = _channels.create()
+        _channels.send(chan, obj, blocking=False)
+        got = _channels.recv(chan)
 
         self.assertEqual(got, obj)
         self.assertIs(type(got), type(obj))
@@ -356,15 +356,15 @@ class ChannelIDTests(TestBase):
 class ChannelTests(TestBase):
 
     def test_create_cid(self):
-        cid = channels.create()
-        self.assertIsInstance(cid, channels.ChannelID)
+        cid = _channels.create()
+        self.assertIsInstance(cid, _channels.ChannelID)
 
     def test_sequential_ids(self):
-        before = channels.list_all()
-        id1 = channels.create()
-        id2 = channels.create()
-        id3 = channels.create()
-        after = channels.list_all()
+        before = _channels.list_all()
+        id1 = _channels.create()
+        id2 = _channels.create()
+        id3 = _channels.create()
+        after = _channels.list_all()
 
         self.assertEqual(id2, int(id1) + 1)
         self.assertEqual(id3, int(id2) + 1)
@@ -373,7 +373,7 @@ class ChannelTests(TestBase):
     def test_ids_global(self):
         id1 = _interpreters.create()
         out = _run_output(id1, dedent("""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             cid = _channels.create()
             print(cid)
             """))
@@ -381,7 +381,7 @@ class ChannelTests(TestBase):
 
         id2 = _interpreters.create()
         out = _run_output(id2, dedent("""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             cid = _channels.create()
             print(cid)
             """))
@@ -392,31 +392,31 @@ class ChannelTests(TestBase):
     def test_channel_list_interpreters_none(self):
         """Test listing interpreters for a channel with no associations."""
         # Test for channel with no associated _interpreters.
-        cid = channels.create()
-        send_interps = channels.list_interpreters(cid, send=True)
-        recv_interps = channels.list_interpreters(cid, send=False)
+        cid = _channels.create()
+        send_interps = _channels.list_interpreters(cid, send=True)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(send_interps, [])
         self.assertEqual(recv_interps, [])
 
     def test_channel_list_interpreters_basic(self):
         """Test basic listing channel _interpreters."""
         interp0, *_ = _interpreters.get_main()
-        cid = channels.create()
-        channels.send(cid, "send", blocking=False)
+        cid = _channels.create()
+        _channels.send(cid, "send", blocking=False)
         # Test for a channel that has one end associated to an interpreter.
-        send_interps = channels.list_interpreters(cid, send=True)
-        recv_interps = channels.list_interpreters(cid, send=False)
+        send_interps = _channels.list_interpreters(cid, send=True)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(send_interps, [interp0])
         self.assertEqual(recv_interps, [])
 
         interp1 = _interpreters.create()
         _run_output(interp1, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             obj = _channels.recv({cid})
             """))
         # Test for channel that has both ends associated to an interpreter.
-        send_interps = channels.list_interpreters(cid, send=True)
-        recv_interps = channels.list_interpreters(cid, send=False)
+        send_interps = _channels.list_interpreters(cid, send=True)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(send_interps, [interp0])
         self.assertEqual(recv_interps, [interp1])
 
@@ -426,23 +426,23 @@ class ChannelTests(TestBase):
         interp1 = _interpreters.create()
         interp2 = _interpreters.create()
         interp3 = _interpreters.create()
-        cid = channels.create()
+        cid = _channels.create()
 
-        channels.send(cid, "send", blocking=False)
+        _channels.send(cid, "send", blocking=False)
         _run_output(interp1, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             _channels.send({cid}, "send", blocking=False)
             """))
         _run_output(interp2, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             obj = _channels.recv({cid})
             """))
         _run_output(interp3, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             obj = _channels.recv({cid})
             """))
-        send_interps = channels.list_interpreters(cid, send=True)
-        recv_interps = channels.list_interpreters(cid, send=False)
+        send_interps = _channels.list_interpreters(cid, send=True)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(set(send_interps), {interp0, interp1})
         self.assertEqual(set(recv_interps), {interp2, interp3})
 
@@ -450,22 +450,22 @@ class ChannelTests(TestBase):
         """Test listing channel interpreters with a destroyed interpreter."""
         interp0, *_ = _interpreters.get_main()
         interp1 = _interpreters.create()
-        cid = channels.create()
-        channels.send(cid, "send", blocking=False)
+        cid = _channels.create()
+        _channels.send(cid, "send", blocking=False)
         _run_output(interp1, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             obj = _channels.recv({cid})
             """))
         # Should be one interpreter associated with each end.
-        send_interps = channels.list_interpreters(cid, send=True)
-        recv_interps = channels.list_interpreters(cid, send=False)
+        send_interps = _channels.list_interpreters(cid, send=True)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(send_interps, [interp0])
         self.assertEqual(recv_interps, [interp1])
 
         _interpreters.destroy(interp1)
         # Destroyed interpreter should not be listed.
-        send_interps = channels.list_interpreters(cid, send=True)
-        recv_interps = channels.list_interpreters(cid, send=False)
+        send_interps = _channels.list_interpreters(cid, send=True)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(send_interps, [interp0])
         self.assertEqual(recv_interps, [])
 
@@ -476,39 +476,39 @@ class ChannelTests(TestBase):
         interp0, *_ = _interpreters.get_main()
         interp1 = _interpreters.create()
         interp2 = _interpreters.create()
-        cid = channels.create()
-        channels.send(cid, "data", blocking=False)
+        cid = _channels.create()
+        _channels.send(cid, "data", blocking=False)
         _run_output(interp1, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             obj = _channels.recv({cid})
             """))
-        channels.send(cid, "data", blocking=False)
+        _channels.send(cid, "data", blocking=False)
         _run_output(interp2, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             obj = _channels.recv({cid})
             """))
         # Check the setup.
-        send_interps = channels.list_interpreters(cid, send=True)
-        recv_interps = channels.list_interpreters(cid, send=False)
+        send_interps = _channels.list_interpreters(cid, send=True)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(len(send_interps), 1)
         self.assertEqual(len(recv_interps), 2)
 
         # Release the main interpreter from the send end.
-        channels.release(cid, send=True)
+        _channels.release(cid, send=True)
         # Send end should have no associated _interpreters.
-        send_interps = channels.list_interpreters(cid, send=True)
-        recv_interps = channels.list_interpreters(cid, send=False)
+        send_interps = _channels.list_interpreters(cid, send=True)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(len(send_interps), 0)
         self.assertEqual(len(recv_interps), 2)
 
         # Release one of the subinterpreters from the receive end.
         _run_output(interp2, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             _channels.release({cid})
             """))
         # Receive end should have the released interpreter removed.
-        send_interps = channels.list_interpreters(cid, send=True)
-        recv_interps = channels.list_interpreters(cid, send=False)
+        send_interps = _channels.list_interpreters(cid, send=True)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(len(send_interps), 0)
         self.assertEqual(recv_interps, [interp1])
 
@@ -516,61 +516,61 @@ class ChannelTests(TestBase):
         """Test listing channel interpreters with a closed channel."""
         interp0, *_ = _interpreters.get_main()
         interp1 = _interpreters.create()
-        cid = channels.create()
+        cid = _channels.create()
         # Put something in the channel so that it's not empty.
-        channels.send(cid, "send", blocking=False)
+        _channels.send(cid, "send", blocking=False)
 
         # Check initial state.
-        send_interps = channels.list_interpreters(cid, send=True)
-        recv_interps = channels.list_interpreters(cid, send=False)
+        send_interps = _channels.list_interpreters(cid, send=True)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(len(send_interps), 1)
         self.assertEqual(len(recv_interps), 0)
 
         # Force close the channel.
-        channels.close(cid, force=True)
+        _channels.close(cid, force=True)
         # Both ends should raise an error.
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.list_interpreters(cid, send=True)
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.list_interpreters(cid, send=False)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.list_interpreters(cid, send=True)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.list_interpreters(cid, send=False)
 
     def test_channel_list_interpreters_closed_send_end(self):
         """Test listing channel interpreters with a channel's send end closed."""
         interp0, *_ = _interpreters.get_main()
         interp1 = _interpreters.create()
-        cid = channels.create()
+        cid = _channels.create()
         # Put something in the channel so that it's not empty.
-        channels.send(cid, "send", blocking=False)
+        _channels.send(cid, "send", blocking=False)
 
         # Check initial state.
-        send_interps = channels.list_interpreters(cid, send=True)
-        recv_interps = channels.list_interpreters(cid, send=False)
+        send_interps = _channels.list_interpreters(cid, send=True)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(len(send_interps), 1)
         self.assertEqual(len(recv_interps), 0)
 
         # Close the send end of the channel.
-        channels.close(cid, send=True)
+        _channels.close(cid, send=True)
         # Send end should raise an error.
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.list_interpreters(cid, send=True)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.list_interpreters(cid, send=True)
         # Receive end should not be closed (since channel is not empty).
-        recv_interps = channels.list_interpreters(cid, send=False)
+        recv_interps = _channels.list_interpreters(cid, send=False)
         self.assertEqual(len(recv_interps), 0)
 
         # Close the receive end of the channel from a subinterpreter.
         _run_output(interp1, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             _channels.close({cid}, force=True)
             """))
         return
         # Both ends should raise an error.
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.list_interpreters(cid, send=True)
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.list_interpreters(cid, send=False)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.list_interpreters(cid, send=True)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.list_interpreters(cid, send=False)
 
     def test_allowed_types(self):
-        cid = channels.create()
+        cid = _channels.create()
         objects = [
             None,
             'spam',
@@ -579,8 +579,8 @@ class ChannelTests(TestBase):
         ]
         for obj in objects:
             with self.subTest(obj):
-                channels.send(cid, obj, blocking=False)
-                got = channels.recv(cid)
+                _channels.send(cid, obj, blocking=False)
+                got = _channels.recv(cid)
 
                 self.assertEqual(got, obj)
                 self.assertIs(type(got), type(obj))
@@ -589,16 +589,16 @@ class ChannelTests(TestBase):
                 # XXX What about between interpreters?
 
     def test_run_string_arg_unresolved(self):
-        cid = channels.create()
+        cid = _channels.create()
         interp = _interpreters.create()
 
         _interpreters.set___main___attrs(interp, dict(cid=cid.send))
         out = _run_output(interp, dedent("""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             print(cid.end)
             _channels.send(cid, b'spam', blocking=False)
             """))
-        obj = channels.recv(cid)
+        obj = _channels.recv(cid)
 
         self.assertEqual(obj, b'spam')
         self.assertEqual(out.strip(), 'send')
@@ -608,17 +608,17 @@ class ChannelTests(TestBase):
     # Note: this test caused crashes on some buildbots (bpo-33615).
     @unittest.skip('disabled until high-level channels exist')
     def test_run_string_arg_resolved(self):
-        cid = channels.create()
-        cid = channels._channel_id(cid, _resolve=True)
+        cid = _channels.create()
+        cid = _channels._channel_id(cid, _resolve=True)
         interp = _interpreters.create()
 
         out = _run_output(interp, dedent("""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             print(chan.id.end)
             _channels.send(chan.id, b'spam', blocking=False)
             """),
             dict(chan=cid.send))
-        obj = channels.recv(cid)
+        obj = _channels.recv(cid)
 
         self.assertEqual(obj, b'spam')
         self.assertEqual(out.strip(), 'send')
@@ -627,10 +627,10 @@ class ChannelTests(TestBase):
     # send/recv
 
     def test_send_recv_main(self):
-        cid = channels.create()
+        cid = _channels.create()
         orig = b'spam'
-        channels.send(cid, orig, blocking=False)
-        obj = channels.recv(cid)
+        _channels.send(cid, orig, blocking=False)
+        obj = _channels.recv(cid)
 
         self.assertEqual(obj, orig)
         self.assertIsNot(obj, orig)
@@ -638,7 +638,7 @@ class ChannelTests(TestBase):
     def test_send_recv_same_interpreter(self):
         id1 = _interpreters.create()
         out = _run_output(id1, dedent("""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             cid = _channels.create()
             orig = b'spam'
             _channels.send(cid, orig, blocking=False)
@@ -648,33 +648,33 @@ class ChannelTests(TestBase):
             """))
 
     def test_send_recv_different_interpreters(self):
-        cid = channels.create()
+        cid = _channels.create()
         id1 = _interpreters.create()
         out = _run_output(id1, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             _channels.send({cid}, b'spam', blocking=False)
             """))
-        obj = channels.recv(cid)
+        obj = _channels.recv(cid)
 
         self.assertEqual(obj, b'spam')
 
     def test_send_recv_different_threads(self):
-        cid = channels.create()
+        cid = _channels.create()
 
         def f():
             obj = recv_wait(cid)
-            channels.send(cid, obj)
+            _channels.send(cid, obj)
         t = threading.Thread(target=f)
         t.start()
 
-        channels.send(cid, b'spam')
+        _channels.send(cid, b'spam')
         obj = recv_wait(cid)
         t.join()
 
         self.assertEqual(obj, b'spam')
 
     def test_send_recv_different_interpreters_and_threads(self):
-        cid = channels.create()
+        cid = _channels.create()
         id1 = _interpreters.create()
         out = None
 
@@ -682,7 +682,7 @@ class ChannelTests(TestBase):
             nonlocal out
             out = _run_output(id1, dedent(f"""
                 import time
-                import _xxinterpchannels as _channels
+                import _interpchannels as _channels
                 while True:
                     try:
                         obj = _channels.recv({cid})
@@ -695,38 +695,38 @@ class ChannelTests(TestBase):
         t = threading.Thread(target=f)
         t.start()
 
-        channels.send(cid, b'spam')
+        _channels.send(cid, b'spam')
         obj = recv_wait(cid)
         t.join()
 
         self.assertEqual(obj, b'eggs')
 
     def test_send_not_found(self):
-        with self.assertRaises(channels.ChannelNotFoundError):
-            channels.send(10, b'spam')
+        with self.assertRaises(_channels.ChannelNotFoundError):
+            _channels.send(10, b'spam')
 
     def test_recv_not_found(self):
-        with self.assertRaises(channels.ChannelNotFoundError):
-            channels.recv(10)
+        with self.assertRaises(_channels.ChannelNotFoundError):
+            _channels.recv(10)
 
     def test_recv_empty(self):
-        cid = channels.create()
-        with self.assertRaises(channels.ChannelEmptyError):
-            channels.recv(cid)
+        cid = _channels.create()
+        with self.assertRaises(_channels.ChannelEmptyError):
+            _channels.recv(cid)
 
     def test_recv_default(self):
         default = object()
-        cid = channels.create()
-        obj1 = channels.recv(cid, default)
-        channels.send(cid, None, blocking=False)
-        channels.send(cid, 1, blocking=False)
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'eggs', blocking=False)
-        obj2 = channels.recv(cid, default)
-        obj3 = channels.recv(cid, default)
-        obj4 = channels.recv(cid)
-        obj5 = channels.recv(cid, default)
-        obj6 = channels.recv(cid, default)
+        cid = _channels.create()
+        obj1 = _channels.recv(cid, default)
+        _channels.send(cid, None, blocking=False)
+        _channels.send(cid, 1, blocking=False)
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'eggs', blocking=False)
+        obj2 = _channels.recv(cid, default)
+        obj3 = _channels.recv(cid, default)
+        obj4 = _channels.recv(cid)
+        obj5 = _channels.recv(cid, default)
+        obj6 = _channels.recv(cid, default)
 
         self.assertIs(obj1, default)
         self.assertIs(obj2, None)
@@ -737,32 +737,32 @@ class ChannelTests(TestBase):
 
     def test_recv_sending_interp_destroyed(self):
         with self.subTest('closed'):
-            cid1 = channels.create()
+            cid1 = _channels.create()
             interp = _interpreters.create()
             _interpreters.run_string(interp, dedent(f"""
-                import _xxinterpchannels as _channels
+                import _interpchannels as _channels
                 _channels.send({cid1}, b'spam', blocking=False)
                 """))
             _interpreters.destroy(interp)
 
             with self.assertRaisesRegex(RuntimeError,
                                         f'channel {cid1} is closed'):
-                channels.recv(cid1)
+                _channels.recv(cid1)
             del cid1
         with self.subTest('still open'):
-            cid2 = channels.create()
+            cid2 = _channels.create()
             interp = _interpreters.create()
             _interpreters.run_string(interp, dedent(f"""
-                import _xxinterpchannels as _channels
+                import _interpchannels as _channels
                 _channels.send({cid2}, b'spam', blocking=False)
                 """))
-            channels.send(cid2, b'eggs', blocking=False)
+            _channels.send(cid2, b'eggs', blocking=False)
             _interpreters.destroy(interp)
 
-            channels.recv(cid2)
+            _channels.recv(cid2)
             with self.assertRaisesRegex(RuntimeError,
                                         f'channel {cid2} is empty'):
-                channels.recv(cid2)
+                _channels.recv(cid2)
             del cid2
 
     #-------------------
@@ -770,9 +770,9 @@ class ChannelTests(TestBase):
 
     def test_send_buffer(self):
         buf = bytearray(b'spamspamspam')
-        cid = channels.create()
-        channels.send_buffer(cid, buf, blocking=False)
-        obj = channels.recv(cid)
+        cid = _channels.create()
+        _channels.send_buffer(cid, buf, blocking=False)
+        obj = _channels.recv(cid)
 
         self.assertIsNot(obj, buf)
         self.assertIsInstance(obj, memoryview)
@@ -790,18 +790,18 @@ class ChannelTests(TestBase):
         # We want a long enough sleep that send() actually has to wait.
 
         if buffer:
-            send = channels.send_buffer
+            send = _channels.send_buffer
         else:
-            send = channels.send
+            send = _channels.send
 
-        cid = channels.create()
+        cid = _channels.create()
         try:
             started = time.monotonic()
             send(cid, obj, blocking=False)
             stopped = time.monotonic()
-            channels.recv(cid)
+            _channels.recv(cid)
         finally:
-            channels.destroy(cid)
+            _channels.destroy(cid)
         delay = stopped - started  # seconds
         delay *= 3
 
@@ -813,14 +813,14 @@ class ChannelTests(TestBase):
         received = None
         obj = b'spam'
         wait = self.build_send_waiter(obj)
-        cid = channels.create()
+        cid = _channels.create()
         def f():
             nonlocal received
             wait()
             received = recv_wait(cid)
         t = threading.Thread(target=f)
         t.start()
-        channels.send(cid, obj, blocking=True)
+        _channels.send(cid, obj, blocking=True)
         t.join()
 
         self.assertEqual(received, obj)
@@ -829,14 +829,14 @@ class ChannelTests(TestBase):
         received = None
         obj = bytearray(b'spam')
         wait = self.build_send_waiter(obj, buffer=True)
-        cid = channels.create()
+        cid = _channels.create()
         def f():
             nonlocal received
             wait()
             received = recv_wait(cid)
         t = threading.Thread(target=f)
         t.start()
-        channels.send_buffer(cid, obj, blocking=True)
+        _channels.send_buffer(cid, obj, blocking=True)
         t.join()
 
         self.assertEqual(received, obj)
@@ -844,13 +844,13 @@ class ChannelTests(TestBase):
     def test_send_blocking_no_wait(self):
         received = None
         obj = b'spam'
-        cid = channels.create()
+        cid = _channels.create()
         def f():
             nonlocal received
             received = recv_wait(cid)
         t = threading.Thread(target=f)
         t.start()
-        channels.send(cid, obj, blocking=True)
+        _channels.send(cid, obj, blocking=True)
         t.join()
 
         self.assertEqual(received, obj)
@@ -858,13 +858,13 @@ class ChannelTests(TestBase):
     def test_send_buffer_blocking_no_wait(self):
         received = None
         obj = bytearray(b'spam')
-        cid = channels.create()
+        cid = _channels.create()
         def f():
             nonlocal received
             received = recv_wait(cid)
         t = threading.Thread(target=f)
         t.start()
-        channels.send_buffer(cid, obj, blocking=True)
+        _channels.send_buffer(cid, obj, blocking=True)
         t.join()
 
         self.assertEqual(received, obj)
@@ -873,25 +873,25 @@ class ChannelTests(TestBase):
         obj = b'spam'
 
         with self.subTest('non-blocking with timeout'):
-            cid = channels.create()
+            cid = _channels.create()
             with self.assertRaises(ValueError):
-                channels.send(cid, obj, blocking=False, timeout=0.1)
+                _channels.send(cid, obj, blocking=False, timeout=0.1)
 
         with self.subTest('timeout hit'):
-            cid = channels.create()
+            cid = _channels.create()
             with self.assertRaises(TimeoutError):
-                channels.send(cid, obj, blocking=True, timeout=0.1)
-            with self.assertRaises(channels.ChannelEmptyError):
-                received = channels.recv(cid)
+                _channels.send(cid, obj, blocking=True, timeout=0.1)
+            with self.assertRaises(_channels.ChannelEmptyError):
+                received = _channels.recv(cid)
                 print(repr(received))
 
         with self.subTest('timeout not hit'):
-            cid = channels.create()
+            cid = _channels.create()
             def f():
                 recv_wait(cid)
             t = threading.Thread(target=f)
             t.start()
-            channels.send(cid, obj, blocking=True, timeout=10)
+            _channels.send(cid, obj, blocking=True, timeout=10)
             t.join()
 
     def test_send_buffer_timeout(self):
@@ -910,25 +910,25 @@ class ChannelTests(TestBase):
         obj = bytearray(b'spam')
 
         with self.subTest('non-blocking with timeout'):
-            cid = channels.create()
+            cid = _channels.create()
             with self.assertRaises(ValueError):
-                channels.send_buffer(cid, obj, blocking=False, timeout=0.1)
+                _channels.send_buffer(cid, obj, blocking=False, timeout=0.1)
 
         with self.subTest('timeout hit'):
-            cid = channels.create()
+            cid = _channels.create()
             with self.assertRaises(TimeoutError):
-                channels.send_buffer(cid, obj, blocking=True, timeout=0.1)
-            with self.assertRaises(channels.ChannelEmptyError):
-                received = channels.recv(cid)
+                _channels.send_buffer(cid, obj, blocking=True, timeout=0.1)
+            with self.assertRaises(_channels.ChannelEmptyError):
+                received = _channels.recv(cid)
                 print(repr(received))
 
         with self.subTest('timeout not hit'):
-            cid = channels.create()
+            cid = _channels.create()
             def f():
                 recv_wait(cid)
             t = threading.Thread(target=f)
             t.start()
-            channels.send_buffer(cid, obj, blocking=True, timeout=10)
+            _channels.send_buffer(cid, obj, blocking=True, timeout=10)
             t.join()
 
     def test_send_closed_while_waiting(self):
@@ -936,25 +936,25 @@ class ChannelTests(TestBase):
         wait = self.build_send_waiter(obj)
 
         with self.subTest('without timeout'):
-            cid = channels.create()
+            cid = _channels.create()
             def f():
                 wait()
-                channels.close(cid, force=True)
+                _channels.close(cid, force=True)
             t = threading.Thread(target=f)
             t.start()
-            with self.assertRaises(channels.ChannelClosedError):
-                channels.send(cid, obj, blocking=True)
+            with self.assertRaises(_channels.ChannelClosedError):
+                _channels.send(cid, obj, blocking=True)
             t.join()
 
         with self.subTest('with timeout'):
-            cid = channels.create()
+            cid = _channels.create()
             def f():
                 wait()
-                channels.close(cid, force=True)
+                _channels.close(cid, force=True)
             t = threading.Thread(target=f)
             t.start()
-            with self.assertRaises(channels.ChannelClosedError):
-                channels.send(cid, obj, blocking=True, timeout=30)
+            with self.assertRaises(_channels.ChannelClosedError):
+                _channels.send(cid, obj, blocking=True, timeout=30)
             t.join()
 
     def test_send_buffer_closed_while_waiting(self):
@@ -974,54 +974,54 @@ class ChannelTests(TestBase):
         wait = self.build_send_waiter(obj, buffer=True)
 
         with self.subTest('without timeout'):
-            cid = channels.create()
+            cid = _channels.create()
             def f():
                 wait()
-                channels.close(cid, force=True)
+                _channels.close(cid, force=True)
             t = threading.Thread(target=f)
             t.start()
-            with self.assertRaises(channels.ChannelClosedError):
-                channels.send_buffer(cid, obj, blocking=True)
+            with self.assertRaises(_channels.ChannelClosedError):
+                _channels.send_buffer(cid, obj, blocking=True)
             t.join()
 
         with self.subTest('with timeout'):
-            cid = channels.create()
+            cid = _channels.create()
             def f():
                 wait()
-                channels.close(cid, force=True)
+                _channels.close(cid, force=True)
             t = threading.Thread(target=f)
             t.start()
-            with self.assertRaises(channels.ChannelClosedError):
-                channels.send_buffer(cid, obj, blocking=True, timeout=30)
+            with self.assertRaises(_channels.ChannelClosedError):
+                _channels.send_buffer(cid, obj, blocking=True, timeout=30)
             t.join()
 
     #-------------------
     # close
 
     def test_close_single_user(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.recv(cid)
-        channels.close(cid)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.recv(cid)
+        _channels.close(cid)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'eggs')
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'eggs')
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_close_multiple_users(self):
-        cid = channels.create()
+        cid = _channels.create()
         id1 = _interpreters.create()
         id2 = _interpreters.create()
         _interpreters.run_string(id1, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             _channels.send({cid}, b'spam', blocking=False)
             """))
         _interpreters.run_string(id2, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             _channels.recv({cid})
             """))
-        channels.close(cid)
+        _channels.close(cid)
 
         excsnap = _interpreters.run_string(id1, dedent(f"""
                 _channels.send({cid}, b'spam')
@@ -1034,13 +1034,13 @@ class ChannelTests(TestBase):
         self.assertEqual(excsnap.type.__name__, 'ChannelClosedError')
 
     def test_close_multiple_times(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.recv(cid)
-        channels.close(cid)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.recv(cid)
+        _channels.close(cid)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.close(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.close(cid)
 
     def test_close_empty(self):
         tests = [
@@ -1051,149 +1051,149 @@ class ChannelTests(TestBase):
             ]
         for send, recv in tests:
             with self.subTest((send, recv)):
-                cid = channels.create()
-                channels.send(cid, b'spam', blocking=False)
-                channels.recv(cid)
-                channels.close(cid, send=send, recv=recv)
+                cid = _channels.create()
+                _channels.send(cid, b'spam', blocking=False)
+                _channels.recv(cid)
+                _channels.close(cid, send=send, recv=recv)
 
-                with self.assertRaises(channels.ChannelClosedError):
-                    channels.send(cid, b'eggs')
-                with self.assertRaises(channels.ChannelClosedError):
-                    channels.recv(cid)
+                with self.assertRaises(_channels.ChannelClosedError):
+                    _channels.send(cid, b'eggs')
+                with self.assertRaises(_channels.ChannelClosedError):
+                    _channels.recv(cid)
 
     def test_close_defaults_with_unused_items(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'ham', blocking=False)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'ham', blocking=False)
 
-        with self.assertRaises(channels.ChannelNotEmptyError):
-            channels.close(cid)
-        channels.recv(cid)
-        channels.send(cid, b'eggs', blocking=False)
+        with self.assertRaises(_channels.ChannelNotEmptyError):
+            _channels.close(cid)
+        _channels.recv(cid)
+        _channels.send(cid, b'eggs', blocking=False)
 
     def test_close_recv_with_unused_items_unforced(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'ham', blocking=False)
-
-        with self.assertRaises(channels.ChannelNotEmptyError):
-            channels.close(cid, recv=True)
-        channels.recv(cid)
-        channels.send(cid, b'eggs', blocking=False)
-        channels.recv(cid)
-        channels.recv(cid)
-        channels.close(cid, recv=True)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'ham', blocking=False)
+
+        with self.assertRaises(_channels.ChannelNotEmptyError):
+            _channels.close(cid, recv=True)
+        _channels.recv(cid)
+        _channels.send(cid, b'eggs', blocking=False)
+        _channels.recv(cid)
+        _channels.recv(cid)
+        _channels.close(cid, recv=True)
 
     def test_close_send_with_unused_items_unforced(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'ham', blocking=False)
-        channels.close(cid, send=True)
-
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'eggs')
-        channels.recv(cid)
-        channels.recv(cid)
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'ham', blocking=False)
+        _channels.close(cid, send=True)
+
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'eggs')
+        _channels.recv(cid)
+        _channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_close_both_with_unused_items_unforced(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'ham', blocking=False)
-
-        with self.assertRaises(channels.ChannelNotEmptyError):
-            channels.close(cid, recv=True, send=True)
-        channels.recv(cid)
-        channels.send(cid, b'eggs', blocking=False)
-        channels.recv(cid)
-        channels.recv(cid)
-        channels.close(cid, recv=True)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'ham', blocking=False)
+
+        with self.assertRaises(_channels.ChannelNotEmptyError):
+            _channels.close(cid, recv=True, send=True)
+        _channels.recv(cid)
+        _channels.send(cid, b'eggs', blocking=False)
+        _channels.recv(cid)
+        _channels.recv(cid)
+        _channels.close(cid, recv=True)
 
     def test_close_recv_with_unused_items_forced(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'ham', blocking=False)
-        channels.close(cid, recv=True, force=True)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'ham', blocking=False)
+        _channels.close(cid, recv=True, force=True)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'eggs')
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'eggs')
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_close_send_with_unused_items_forced(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'ham', blocking=False)
-        channels.close(cid, send=True, force=True)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'ham', blocking=False)
+        _channels.close(cid, send=True, force=True)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'eggs')
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'eggs')
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_close_both_with_unused_items_forced(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'ham', blocking=False)
-        channels.close(cid, send=True, recv=True, force=True)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'ham', blocking=False)
+        _channels.close(cid, send=True, recv=True, force=True)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'eggs')
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'eggs')
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_close_never_used(self):
-        cid = channels.create()
-        channels.close(cid)
+        cid = _channels.create()
+        _channels.close(cid)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'spam')
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'spam')
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_close_by_unassociated_interp(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
         interp = _interpreters.create()
         _interpreters.run_string(interp, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             _channels.close({cid}, force=True)
             """))
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.close(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.close(cid)
 
     def test_close_used_multiple_times_by_single_user(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'spam', blocking=False)
-        channels.recv(cid)
-        channels.close(cid, force=True)
-
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'eggs')
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.recv(cid)
+        _channels.close(cid, force=True)
+
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'eggs')
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_channel_list_interpreters_invalid_channel(self):
-        cid = channels.create()
+        cid = _channels.create()
         # Test for invalid channel ID.
-        with self.assertRaises(channels.ChannelNotFoundError):
-            channels.list_interpreters(1000, send=True)
+        with self.assertRaises(_channels.ChannelNotFoundError):
+            _channels.list_interpreters(1000, send=True)
 
-        channels.close(cid)
+        _channels.close(cid)
         # Test for a channel that has been closed.
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.list_interpreters(cid, send=True)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.list_interpreters(cid, send=True)
 
     def test_channel_list_interpreters_invalid_args(self):
         # Tests for invalid arguments passed to the API.
-        cid = channels.create()
+        cid = _channels.create()
         with self.assertRaises(TypeError):
-            channels.list_interpreters(cid)
+            _channels.list_interpreters(cid)
 
 
 class ChannelReleaseTests(TestBase):
@@ -1240,26 +1240,26 @@ class ChannelReleaseTests(TestBase):
     """
 
     def test_single_user(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.recv(cid)
-        channels.release(cid, send=True, recv=True)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.recv(cid)
+        _channels.release(cid, send=True, recv=True)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'eggs')
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'eggs')
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_multiple_users(self):
-        cid = channels.create()
+        cid = _channels.create()
         id1 = _interpreters.create()
         id2 = _interpreters.create()
         _interpreters.run_string(id1, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             _channels.send({cid}, b'spam', blocking=False)
             """))
         out = _run_output(id2, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             obj = _channels.recv({cid})
             _channels.release({cid})
             print(repr(obj))
@@ -1271,94 +1271,94 @@ class ChannelReleaseTests(TestBase):
         self.assertEqual(out.strip(), "b'spam'")
 
     def test_no_kwargs(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.recv(cid)
-        channels.release(cid)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.recv(cid)
+        _channels.release(cid)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'eggs')
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'eggs')
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_multiple_times(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.recv(cid)
-        channels.release(cid, send=True, recv=True)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.recv(cid)
+        _channels.release(cid, send=True, recv=True)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.release(cid, send=True, recv=True)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.release(cid, send=True, recv=True)
 
     def test_with_unused_items(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'ham', blocking=False)
-        channels.release(cid, send=True, recv=True)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'ham', blocking=False)
+        _channels.release(cid, send=True, recv=True)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_never_used(self):
-        cid = channels.create()
-        channels.release(cid)
+        cid = _channels.create()
+        _channels.release(cid)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'spam')
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'spam')
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_by_unassociated_interp(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
         interp = _interpreters.create()
         _interpreters.run_string(interp, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             _channels.release({cid})
             """))
-        obj = channels.recv(cid)
-        channels.release(cid)
+        obj = _channels.recv(cid)
+        _channels.release(cid)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'eggs')
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'eggs')
         self.assertEqual(obj, b'spam')
 
     def test_close_if_unassociated(self):
         # XXX Something's not right with this test...
-        cid = channels.create()
+        cid = _channels.create()
         interp = _interpreters.create()
         _interpreters.run_string(interp, dedent(f"""
-            import _xxinterpchannels as _channels
+            import _interpchannels as _channels
             obj = _channels.send({cid}, b'spam', blocking=False)
             _channels.release({cid})
             """))
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
     def test_partially(self):
         # XXX Is partial close too weird/confusing?
-        cid = channels.create()
-        channels.send(cid, None, blocking=False)
-        channels.recv(cid)
-        channels.send(cid, b'spam', blocking=False)
-        channels.release(cid, send=True)
-        obj = channels.recv(cid)
+        cid = _channels.create()
+        _channels.send(cid, None, blocking=False)
+        _channels.recv(cid)
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.release(cid, send=True)
+        obj = _channels.recv(cid)
 
         self.assertEqual(obj, b'spam')
 
     def test_used_multiple_times_by_single_user(self):
-        cid = channels.create()
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'spam', blocking=False)
-        channels.send(cid, b'spam', blocking=False)
-        channels.recv(cid)
-        channels.release(cid, send=True, recv=True)
+        cid = _channels.create()
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.send(cid, b'spam', blocking=False)
+        _channels.recv(cid)
+        _channels.release(cid, send=True, recv=True)
 
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.send(cid, b'eggs')
-        with self.assertRaises(channels.ChannelClosedError):
-            channels.recv(cid)
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.send(cid, b'eggs')
+        with self.assertRaises(_channels.ChannelClosedError):
+            _channels.recv(cid)
 
 
 class ChannelCloseFixture(namedtuple('ChannelCloseFixture',
@@ -1428,18 +1428,18 @@ class ChannelCloseFixture(namedtuple('ChannelCloseFixture',
 
     def _new_channel(self, creator):
         if creator.name == 'main':
-            return channels.create()
+            return _channels.create()
         else:
-            ch = channels.create()
+            ch = _channels.create()
             run_interp(creator.id, f"""
-                import _xxsubinterpreters
+                import _interpreters
                 cid = _xxsubchannels.create()
                 # We purposefully send back an int to avoid tying the
                 # channel to the other interpreter.
                 _xxsubchannels.send({ch}, int(cid), blocking=False)
-                del _xxsubinterpreters
+                del _interpreters
                 """)
-            self._cid = channels.recv(ch)
+            self._cid = _channels.recv(ch)
         return self._cid
 
     def _get_interpreter(self, interp):
@@ -1464,13 +1464,13 @@ class ChannelCloseFixture(namedtuple('ChannelCloseFixture',
         if interp.name == 'main':
             return
         run_interp(interp.id, f"""
-            import _xxinterpchannels as channels
-            import test.test__xxinterpchannels as helpers
+            import _interpchannels as channels
+            import test.test__interpchannels as helpers
             ChannelState = helpers.ChannelState
             try:
                 cid
             except NameError:
-                cid = channels._channel_id({self.cid})
+                cid = _channels._channel_id({self.cid})
             """)
 
 
@@ -1657,7 +1657,7 @@ class ExhaustiveChannelTests(TestBase):
                 )
             fix.record_action(action, result)
         else:
-            _cid = channels.create()
+            _cid = _channels.create()
             run_interp(interp.id, f"""
                 result = helpers.run_action(
                     {fix.cid},
@@ -1666,12 +1666,12 @@ class ExhaustiveChannelTests(TestBase):
                     {repr(fix.state)},
                     hideclosed={hideclosed},
                     )
-                channels.send({_cid}, result.pending.to_bytes(1, 'little'), blocking=False)
-                channels.send({_cid}, b'X' if result.closed else b'', blocking=False)
+                _channels.send({_cid}, result.pending.to_bytes(1, 'little'), blocking=False)
+                _channels.send({_cid}, b'X' if result.closed else b'', blocking=False)
                 """)
             result = ChannelState(
-                pending=int.from_bytes(channels.recv(_cid), 'little'),
-                closed=bool(channels.recv(_cid)),
+                pending=int.from_bytes(_channels.recv(_cid), 'little'),
+                closed=bool(_channels.recv(_cid)),
                 )
             fix.record_action(action, result)
 
@@ -1694,42 +1694,42 @@ class ExhaustiveChannelTests(TestBase):
         if not fix.expect_closed_error():
             self.run_action(fix, close, hideclosed=False)
         else:
-            with self.assertRaises(channels.ChannelClosedError):
+            with self.assertRaises(_channels.ChannelClosedError):
                 self.run_action(fix, close, hideclosed=False)
 
     def _assert_closed_in_interp(self, fix, interp=None):
         if interp is None or interp.name == 'main':
-            with self.assertRaises(channels.ChannelClosedError):
-                channels.recv(fix.cid)
-            with self.assertRaises(channels.ChannelClosedError):
-                channels.send(fix.cid, b'spam')
-            with self.assertRaises(channels.ChannelClosedError):
-                channels.close(fix.cid)
-            with self.assertRaises(channels.ChannelClosedError):
-                channels.close(fix.cid, force=True)
+            with self.assertRaises(_channels.ChannelClosedError):
+                _channels.recv(fix.cid)
+            with self.assertRaises(_channels.ChannelClosedError):
+                _channels.send(fix.cid, b'spam')
+            with self.assertRaises(_channels.ChannelClosedError):
+                _channels.close(fix.cid)
+            with self.assertRaises(_channels.ChannelClosedError):
+                _channels.close(fix.cid, force=True)
         else:
             run_interp(interp.id, """
                 with helpers.expect_channel_closed():
-                    channels.recv(cid)
+                    _channels.recv(cid)
                 """)
             run_interp(interp.id, """
                 with helpers.expect_channel_closed():
-                    channels.send(cid, b'spam', blocking=False)
+                    _channels.send(cid, b'spam', blocking=False)
                 """)
             run_interp(interp.id, """
                 with helpers.expect_channel_closed():
-                    channels.close(cid)
+                    _channels.close(cid)
                 """)
             run_interp(interp.id, """
                 with helpers.expect_channel_closed():
-                    channels.close(cid, force=True)
+                    _channels.close(cid, force=True)
                 """)
 
     def _assert_closed(self, fix):
         self.assertTrue(fix.state.closed)
 
         for _ in range(fix.state.pending):
-            channels.recv(fix.cid)
+            _channels.recv(fix.cid)
         self._assert_closed_in_interp(fix)
 
         for interp in ('same', 'other'):
similarity index 98%
rename from Lib/test/test__xxsubinterpreters.py
rename to Lib/test/test__interpreters.py
index c8c964f642f1cfbe47055fdcd77243bb59714ba6..beeb280894ea99c73ea07e35b3d671ad4f310eff 100644 (file)
@@ -13,9 +13,9 @@ from test.support import os_helper
 from test.support import script_helper
 
 
-_interpreters = import_helper.import_module('_xxsubinterpreters')
+_interpreters = import_helper.import_module('_interpreters')
 _testinternalcapi = import_helper.import_module('_testinternalcapi')
-from _xxsubinterpreters import InterpreterNotFoundError
+from _interpreters import InterpreterNotFoundError
 
 
 ##################################
@@ -231,7 +231,7 @@ class ModuleTests(TestBase):
     def test_import_in_interpreter(self):
         _run_output(
             _interpreters.create(),
-            'import _xxsubinterpreters as _interpreters',
+            'import _interpreters',
         )
 
 
@@ -273,7 +273,7 @@ class GetCurrentTests(TestBase):
         main, *_ = _interpreters.get_main()
         interp = _interpreters.create()
         out = _run_output(interp, dedent("""
-            import _xxsubinterpreters as _interpreters
+            import _interpreters
             cur, *_ = _interpreters.get_current()
             print(cur)
             assert isinstance(cur, int)
@@ -296,7 +296,7 @@ class GetMainTests(TestBase):
         [expected] = [id for id, *_ in _interpreters.list_all()]
         interp = _interpreters.create()
         out = _run_output(interp, dedent("""
-            import _xxsubinterpreters as _interpreters
+            import _interpreters
             main, *_ = _interpreters.get_main()
             print(main)
             assert isinstance(main, int)
@@ -323,7 +323,7 @@ class IsRunningTests(TestBase):
     def test_from_subinterpreter(self):
         interp = _interpreters.create()
         out = _run_output(interp, dedent(f"""
-            import _xxsubinterpreters as _interpreters
+            import _interpreters
             if _interpreters.is_running({interp}):
                 print(True)
             else:
@@ -385,7 +385,7 @@ class CreateTests(TestBase):
         main, = [id for id, *_ in _interpreters.list_all()]
         id1 = _interpreters.create()
         out = _run_output(id1, dedent("""
-            import _xxsubinterpreters as _interpreters
+            import _interpreters
             id = _interpreters.create()
             print(id)
             assert isinstance(id, int)
@@ -402,7 +402,7 @@ class CreateTests(TestBase):
         def f():
             nonlocal id2
             out = _run_output(id1, dedent("""
-                import _xxsubinterpreters as _interpreters
+                import _interpreters
                 id = _interpreters.create()
                 print(id)
                 """))
@@ -505,7 +505,7 @@ class DestroyTests(TestBase):
         main, = [id for id, *_ in _interpreters.list_all()]
         id = _interpreters.create()
         script = dedent(f"""
-            import _xxsubinterpreters as _interpreters
+            import _interpreters
             try:
                 _interpreters.destroy({id})
             except _interpreters.InterpreterError:
@@ -521,7 +521,7 @@ class DestroyTests(TestBase):
         id1 = _interpreters.create()
         id2 = _interpreters.create()
         script = dedent(f"""
-            import _xxsubinterpreters as _interpreters
+            import _interpreters
             _interpreters.destroy({id2})
             """)
         _interpreters.run_string(id1, script)
@@ -862,7 +862,7 @@ class RunStringTests(TestBase):
         script = dedent("""
         from textwrap import dedent
         import threading
-        import _xxsubinterpreters as _interpreters
+        import _interpreters
         id = _interpreters.create()
         def f():
             _interpreters.run_string(id, dedent('''
index 9c24ec8fd05b12e7287c844d4454d65b42dc1ce0..0701eafb7c36e0f37fc6060bff209e19a71ae9ce 100644 (file)
@@ -42,7 +42,7 @@ try:
 except ImportError:
     _testsinglephase = None
 try:
-    import _xxsubinterpreters as _interpreters
+    import _interpreters
 except ModuleNotFoundError:
     _interpreters = None
 
index 947a7b19056bdbf83211b0f96e0afca5b888d133..40c3023a827067b4ca80e51c1fa62ec81015f6b0 100644 (file)
@@ -50,7 +50,7 @@ try:
 except ImportError:
     _testmultiphase = None
 try:
-    import _xxsubinterpreters as _interpreters
+    import _interpreters
 except ModuleNotFoundError:
     _interpreters = None
 try:
index f0583c5fd0196faa739f74d9877b93fc9fb938b8..668042782bdc5f9f39f03058853c31873fba5462 100644 (file)
@@ -27,7 +27,7 @@ try:
 except ImportError:
     _testmultiphase = None
 try:
-    import _xxsubinterpreters as _interpreters
+    import _interpreters
 except ModuleNotFoundError:
     _interpreters = None
 
index 2bd8bee4063920288135feffea4ec415b80f8340..0039fa46496c53f5814ce61291c9235157988af5 100644 (file)
@@ -9,7 +9,7 @@ import unittest
 from test import support
 from test.support import import_helper
 # Raise SkipTest if subinterpreters not supported.
-_interpreters = import_helper.import_module('_xxsubinterpreters')
+_interpreters = import_helper.import_module('_interpreters')
 from test.support import Py_GIL_DISABLED
 from test.support import interpreters
 from test.support.interpreters import (
@@ -385,7 +385,7 @@ class TestInterpreterIsRunning(TestBase):
     def test_from_subinterpreter(self):
         interp = interpreters.create()
         out = _run_output(interp, dedent(f"""
-            import _xxsubinterpreters as _interpreters
+            import _interpreters
             if _interpreters.is_running({interp.id}):
                 print(True)
             else:
@@ -876,7 +876,7 @@ class TestInterpreterExec(TestBase):
             with self.assertRaisesRegex(InterpreterError, 'unrecognized'):
                 interp.exec('raise Exception("it worked!")')
 
-    # test_xxsubinterpreters covers the remaining
+    # test__interpreters covers the remaining
     # Interpreter.exec() behavior.
 
 
@@ -1290,7 +1290,7 @@ class LowLevelTests(TestBase):
             self.assertEqual(whence, _interpreters.WHENCE_RUNTIME)
 
         script = f"""
-            import {_interpreters.__name__} as _interpreters
+            import _interpreters
             interpid, whence = _interpreters.get_current()
             print((interpid, whence))
             """
@@ -1333,7 +1333,7 @@ class LowLevelTests(TestBase):
 
         with self.subTest('via interp from _interpreters'):
             text = self.run_and_capture(interpid2, f"""
-                import {_interpreters.__name__} as _interpreters
+                import _interpreters
                 print(
                     _interpreters.list_all())
                 """)
@@ -1352,7 +1352,7 @@ class LowLevelTests(TestBase):
                 (interpid5, _interpreters.WHENCE_STDLIB),
             ]
             text = self.run_temp_from_capi(f"""
-                import {_interpreters.__name__} as _interpreters
+                import _interpreters
                 _interpreters.create()
                 print(
                     _interpreters.list_all())
@@ -1507,7 +1507,7 @@ class LowLevelTests(TestBase):
 
         with self.subTest('from C-API, running'):
             text = self.run_temp_from_capi(dedent(f"""
-                import {_interpreters.__name__} as _interpreters
+                import _interpreters
                 interpid, *_ = _interpreters.get_current()
                 print(_interpreters.whence(interpid))
                 """),
@@ -1518,7 +1518,7 @@ class LowLevelTests(TestBase):
         with self.subTest('from legacy C-API, running'):
             ...
             text = self.run_temp_from_capi(dedent(f"""
-                import {_interpreters.__name__} as _interpreters
+                import _interpreters
                 interpid, *_ = _interpreters.get_current()
                 print(_interpreters.whence(interpid))
                 """),
index 7e0b82884c33d39bca81f891c7e11271c053e7c0..68cc45d1a5e09f89bd244a99380d9488b20d26a5 100644 (file)
@@ -7,7 +7,7 @@ import time
 
 from test.support import import_helper
 # Raise SkipTest if subinterpreters not supported.
-_channels = import_helper.import_module('_xxinterpchannels')
+_channels = import_helper.import_module('_interpchannels')
 from test.support import interpreters
 from test.support.interpreters import channels
 from .utils import _run_output, TestBase
@@ -22,7 +22,7 @@ class LowLevelTests(TestBase):
     # encountered by the high-level module, thus they
     # mostly shouldn't matter as much.
 
-    # Additional tests are found in Lib/test/test__xxinterpchannels.py.
+    # Additional tests are found in Lib/test/test__interpchannels.py.
     # XXX Those should be either moved to LowLevelTests or eliminated
     # in favor of high-level tests in this file.
 
index becf003e2e5f2076e4aa80f830b59cbd45c9ca64..ac24f6568acd95224c906dc8e78bc1fb04f43ef9 100644 (file)
@@ -10,7 +10,7 @@ from test import support
 from test.support import import_helper
 from test.support import os_helper
 # Raise SkipTest if subinterpreters not supported.
-import_helper.import_module('_xxsubinterpreters')
+import_helper.import_module('_interpreters')
 from .utils import TestBase
 
 
index 8ab9ebb354712aa89f76c87973fb9574e9ddcfff..a3d44c402e0ea26e4b3411d9afdf8ecce66256b7 100644 (file)
@@ -7,7 +7,7 @@ import time
 
 from test.support import import_helper, Py_DEBUG
 # Raise SkipTest if subinterpreters not supported.
-_queues = import_helper.import_module('_xxinterpqueues')
+_queues = import_helper.import_module('_interpqueues')
 from test.support import interpreters
 from test.support.interpreters import queues
 from .utils import _run_output, TestBase as _TestBase
index 3cc570b3bf7128c899be71a99e21aece5deea186..e400535b2a0e4ef0f14f02f7f8e92df4135d263a 100644 (file)
@@ -5,7 +5,7 @@ from test import support
 from test.support import import_helper
 from test.support import threading_helper
 # Raise SkipTest if subinterpreters not supported.
-import_helper.import_module('_xxsubinterpreters')
+import_helper.import_module('_interpreters')
 from test.support import interpreters
 from .utils import TestBase
 
index 8e475816f04de4db318d7301e4af0e0d6382d014..312e6fff0ceb176fa806bc0f1879951190d1e3a8 100644 (file)
@@ -21,7 +21,7 @@ from test import support
 # We would use test.support.import_helper.import_module(),
 # but the indirect import of test.support.os_helper causes refleaks.
 try:
-    import _xxsubinterpreters as _interpreters
+    import _interpreters
 except ImportError as exc:
     raise unittest.SkipTest(str(exc))
 from test.support import interpreters
index c7cf44de2dbe79a54d9547da662f23ebc1017583..0e52e10602cf8572c8c7a7514bd318310bbfaa14 100644 (file)
@@ -1686,11 +1686,11 @@ Modules/pwdmodule.o: $(srcdir)/Modules/pwdmodule.c $(srcdir)/Modules/posixmodule
 
 Modules/signalmodule.o: $(srcdir)/Modules/signalmodule.c $(srcdir)/Modules/posixmodule.h
 
-Modules/_xxsubinterpretersmodule.o: $(srcdir)/Modules/_xxsubinterpretersmodule.c $(srcdir)/Modules/_interpreters_common.h
+Modules/_interpretersmodule.o: $(srcdir)/Modules/_interpretersmodule.c $(srcdir)/Modules/_interpreters_common.h
 
-Modules/_xxinterpqueuesmodule.o: $(srcdir)/Modules/_xxinterpqueuesmodule.c $(srcdir)/Modules/_interpreters_common.h
+Modules/_interpqueuesmodule.o: $(srcdir)/Modules/_interpqueuesmodule.c $(srcdir)/Modules/_interpreters_common.h
 
-Modules/_xxinterpchannelsmodule.o: $(srcdir)/Modules/_xxinterpchannelsmodule.c $(srcdir)/Modules/_interpreters_common.h
+Modules/_interpchannelsmodule.o: $(srcdir)/Modules/_interpchannelsmodule.c $(srcdir)/Modules/_interpreters_common.h
 
 Python/crossinterp.o: $(srcdir)/Python/crossinterp.c $(srcdir)/Python/crossinterp_data_lookup.h $(srcdir)/Python/crossinterp_exceptions.h
 
diff --git a/Misc/NEWS.d/next/Library/2024-04-11-18-11-37.gh-issue-76785.BWNkhC.rst b/Misc/NEWS.d/next/Library/2024-04-11-18-11-37.gh-issue-76785.BWNkhC.rst
new file mode 100644 (file)
index 0000000..f3e4c57
--- /dev/null
@@ -0,0 +1,6 @@
+We've exposed the low-level :mod:`!_interpreters` module for the sake of the
+PyPI implementation of :pep:`734`.  It was sometimes available as the
+:mod:`!_xxsubinterpreters` module and was formerly used only for testing. For
+the most part, it should be considered an internal module, like :mod:`!_thread`
+and :mod:`!_imp`. See
+https://discuss.python.org/t/pep-734-multiple-interpreters-in-the-stdlib/41147/26.
index cd1cf24c25d40643674481f9feaa55002ac65676..e4acf6bc7de8ea5797d9417ea47484727366bff1 100644 (file)
@@ -137,6 +137,9 @@ PYTHONPATH=$(COREPYTHONPATH)
 #_datetime _datetimemodule.c
 #_decimal _decimal/_decimal.c
 #_heapq _heapqmodule.c
+#_interpchannels _interpchannelsmodule.c
+#_interpqueues _interpqueuesmodule.c
+#_interpreters _interpretersmodule.c
 #_json _json.c
 #_lsprof _lsprof.c rotatingtree.c
 #_multiprocessing -I$(srcdir)/Modules/_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c
@@ -271,9 +274,6 @@ PYTHONPATH=$(COREPYTHONPATH)
 
 # Testing
 
-#_xxsubinterpreters _xxsubinterpretersmodule.c
-#_xxinterpchannels _xxinterpchannelsmodule.c
-#_xxinterpqueues _xxinterpqueuesmodule.c
 #_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c
 #_testbuffer _testbuffer.c
 #_testinternalcapi _testinternalcapi.c
index 0b0c1eef0cd8721a3b63dcb752fb876e114b69e3..61037f592f82f1823bd603d2bf9c783b89a338f8 100644 (file)
 @MODULE__STRUCT_TRUE@_struct _struct.c
 
 # build supports subinterpreters
-@MODULE__XXSUBINTERPRETERS_TRUE@_xxsubinterpreters _xxsubinterpretersmodule.c
-@MODULE__XXINTERPCHANNELS_TRUE@_xxinterpchannels _xxinterpchannelsmodule.c
-@MODULE__XXINTERPQUEUES_TRUE@_xxinterpqueues _xxinterpqueuesmodule.c
+@MODULE__INTERPRETERS_TRUE@_interpreters _interpretersmodule.c
+@MODULE__INTERPCHANNELS_TRUE@_interpchannels _interpchannelsmodule.c
+@MODULE__INTERPQUEUES_TRUE@_interpqueues _interpqueuesmodule.c
+
 @MODULE__ZONEINFO_TRUE@_zoneinfo _zoneinfo.c
 
 # needs libm
similarity index 99%
rename from Modules/_xxinterpchannelsmodule.c
rename to Modules/_interpchannelsmodule.c
index bea0a6cf93fa02df34f28e9147456affe361ecd9..43c96584790fa058ab50e3d95daa34f1fcc3a4d2 100644 (file)
@@ -84,7 +84,7 @@ channel's queue, which are safely managed via the _PyCrossInterpreterData_*()
 API..  The module does not create any objects that are shared globally.
 */
 
-#define MODULE_NAME _xxinterpchannels
+#define MODULE_NAME _interpchannels
 #define MODULE_NAME_STR Py_STRINGIFY(MODULE_NAME)
 #define MODINIT_FUNC_NAME RESOLVE_MODINIT_FUNC_NAME(MODULE_NAME)
 
similarity index 99%
rename from Modules/_xxinterpqueuesmodule.c
rename to Modules/_interpqueuesmodule.c
index 96f6eeeea94b5e4782fe5ad83b44bd37fbe61df0..46801bd416495a61580c612e288719f12d53cfbc 100644 (file)
@@ -13,7 +13,7 @@
 #undef REGISTERS_HEAP_TYPES
 
 
-#define MODULE_NAME _xxinterpqueues
+#define MODULE_NAME _interpqueues
 #define MODULE_NAME_STR Py_STRINGIFY(MODULE_NAME)
 #define MODINIT_FUNC_NAME RESOLVE_MODINIT_FUNC_NAME(MODULE_NAME)
 
similarity index 99%
rename from Modules/_xxsubinterpretersmodule.c
rename to Modules/_interpretersmodule.c
index 8fcd4fc4154882fbf0f003d39fb875ff78c7c178..8fea56977ef3fe1c22838dc08ca6e88a6a6379b9 100644 (file)
@@ -23,7 +23,7 @@
 #include "_interpreters_common.h"
 
 
-#define MODULE_NAME _xxsubinterpreters
+#define MODULE_NAME _interpreters
 #define MODULE_NAME_STR Py_STRINGIFY(MODULE_NAME)
 #define MODINIT_FUNC_NAME RESOLVE_MODINIT_FUNC_NAME(MODULE_NAME)
 
index 5eff2f5b2310bbbd71c8319105f30922882b92d5..b744f711b0d6363c21229768089899b523cc5c38 100644 (file)
@@ -35,9 +35,9 @@ extern PyObject* PyInit__codecs(void);
 extern PyObject* PyInit__weakref(void);
 /* XXX: These two should really be extracted to standalone extensions. */
 extern PyObject* PyInit_xxsubtype(void);
-extern PyObject* PyInit__xxsubinterpreters(void);
-extern PyObject* PyInit__xxinterpchannels(void);
-extern PyObject* PyInit__xxinterpqueues(void);
+extern PyObject* PyInit__interpreters(void);
+extern PyObject* PyInit__interpchannels(void);
+extern PyObject* PyInit__interpqueues(void);
 extern PyObject* PyInit__random(void);
 extern PyObject* PyInit_itertools(void);
 extern PyObject* PyInit__collections(void);
@@ -139,9 +139,9 @@ struct _inittab _PyImport_Inittab[] = {
     {"_json", PyInit__json},
 
     {"xxsubtype", PyInit_xxsubtype},
-    {"_xxsubinterpreters", PyInit__xxsubinterpreters},
-    {"_xxinterpchannels", PyInit__xxinterpchannels},
-    {"_xxinterpqueues", PyInit__xxinterpqueues},
+    {"_interpreters", PyInit__interpreters},
+    {"_interpchannels", PyInit__interpchannels},
+    {"_interpqueues", PyInit__interpqueues},
 #ifdef _Py_HAVE_ZLIB
     {"zlib", PyInit_zlib},
 #endif
index 3a019a5fe550dbd1839e530fd0c35583161c06ba..25d52945c1c33006c96e824f0b89377b9211c6d4 100644 (file)
     <ClCompile Include="..\Modules\_typingmodule.c" />
     <ClCompile Include="..\Modules\timemodule.c" />
     <ClCompile Include="..\Modules\xxsubtype.c" />
-    <ClCompile Include="..\Modules\_xxsubinterpretersmodule.c" />
-    <ClCompile Include="..\Modules\_xxinterpchannelsmodule.c" />
-    <ClCompile Include="..\Modules\_xxinterpqueuesmodule.c" />
+    <ClCompile Include="..\Modules\_interpretersmodule.c" />
+    <ClCompile Include="..\Modules\_interpchannelsmodule.c" />
+    <ClCompile Include="..\Modules\_interpqueuesmodule.c" />
     <ClCompile Include="..\Modules\_io\fileio.c" />
     <ClCompile Include="..\Modules\_io\bytesio.c" />
     <ClCompile Include="..\Modules\_io\stringio.c" />
index e43970410bd378ef3d6cd6a4396aa0113404f7eb..4b1f9aa6538562e27c10c568504e3ec0560f7630 100644 (file)
     <ClCompile Include="..\Parser\peg_api.c">
       <Filter>Parser</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_xxsubinterpretersmodule.c">
+    <ClCompile Include="..\Modules\_interpretersmodule.c">
       <Filter>Modules</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_xxinterpchannelsmodule.c">
+    <ClCompile Include="..\Modules\_interpchannelsmodule.c">
       <Filter>Modules</Filter>
     </ClCompile>
-    <ClCompile Include="..\Modules\_xxinterpqueuesmodule.c">
+    <ClCompile Include="..\Modules\_interpqueuesmodule.c">
       <Filter>Modules</Filter>
     </ClCompile>
     <ClCompile Include="..\Parser\string_parser.c">
index ac9d91b5e128850232fd64ce6cdb23c6272fa4bd..08a66f447e22580507b40a302b0d25f159cb0ed8 100644 (file)
@@ -37,6 +37,9 @@ static const char* _Py_stdlib_module_names[] = {
 "_hashlib",
 "_heapq",
 "_imp",
+"_interpchannels",
+"_interpqueues",
+"_interpreters",
 "_io",
 "_ios_support",
 "_json",
index 69dc74e7f25ec989a05aee148de38142b77afa53..f9fd29509f3225df7e07d86f1aebc476fdf8e87a 100644 (file)
@@ -36,9 +36,6 @@ IGNORE = {
     '_testmultiphase',
     '_testsinglephase',
     '_testexternalinspection',
-    '_xxsubinterpreters',
-    '_xxinterpchannels',
-    '_xxinterpqueues',
     '_xxtestfuzz',
     'idlelib.idle_test',
     'test',
index e0ae39036c128da149065081b6f1fda7d8f6b78c..87b695de23e25e2ce6acc2cdfe9a9b0b8047b1b8 100644 (file)
@@ -164,8 +164,8 @@ Python/pylifecycle.c        _Py_FatalErrorFormat    reentrant       -
 Python/pylifecycle.c   fatal_error     reentrant       -
 
 # explicitly protected, internal-only
-Modules/_xxinterpchannelsmodule.c      -       _globals        -
-Modules/_xxinterpqueuesmodule.c        -       _globals        -
+Modules/_interpchannelsmodule.c        -       _globals        -
+Modules/_interpqueuesmodule.c  -       _globals        -
 
 # set once during module init
 Modules/_decimal/_decimal.c    -       minalloc_is_set -
@@ -246,11 +246,11 @@ Modules/_struct.c -       bigendian_table -
 Modules/_struct.c      -       lilendian_table -
 Modules/_struct.c      -       native_table    -
 Modules/_tkinter.c     -       state_key       -
-Modules/_xxinterpchannelsmodule.c      -       _channelid_end_recv     -
-Modules/_xxinterpchannelsmodule.c      -       _channelid_end_send     -
+Modules/_interpchannelsmodule.c        -       _channelid_end_recv     -
+Modules/_interpchannelsmodule.c        -       _channelid_end_send     -
 Modules/_zoneinfo.c    -       DAYS_BEFORE_MONTH       -
 Modules/_zoneinfo.c    -       DAYS_IN_MONTH   -
-Modules/_xxsubinterpretersmodule.c     -       no_exception    -
+Modules/_interpretersmodule.c  -       no_exception    -
 Modules/arraymodule.c  -       descriptors     -
 Modules/arraymodule.c  -       emptybuf        -
 Modules/cjkcodecs/_codecs_cn.c -       _mapping_list   -
index 94ee1ca9cd0b8dc7a187c8fdb4f69b0afe44ba5e..78f86d83077eaaccd3f79afb0b846270d6cac1af 100755 (executable)
--- a/configure
+++ b/configure
@@ -775,12 +775,12 @@ MODULE__MULTIPROCESSING_FALSE
 MODULE__MULTIPROCESSING_TRUE
 MODULE__ZONEINFO_FALSE
 MODULE__ZONEINFO_TRUE
-MODULE__XXINTERPQUEUES_FALSE
-MODULE__XXINTERPQUEUES_TRUE
-MODULE__XXINTERPCHANNELS_FALSE
-MODULE__XXINTERPCHANNELS_TRUE
-MODULE__XXSUBINTERPRETERS_FALSE
-MODULE__XXSUBINTERPRETERS_TRUE
+MODULE__INTERPQUEUES_FALSE
+MODULE__INTERPQUEUES_TRUE
+MODULE__INTERPCHANNELS_FALSE
+MODULE__INTERPCHANNELS_TRUE
+MODULE__INTERPRETERS_FALSE
+MODULE__INTERPRETERS_TRUE
 MODULE__TYPING_FALSE
 MODULE__TYPING_TRUE
 MODULE__STRUCT_FALSE
@@ -28659,9 +28659,9 @@ case $ac_sys_system in #(
     py_cv_module__posixsubprocess=n/a
     py_cv_module__scproxy=n/a
     py_cv_module__tkinter=n/a
-    py_cv_module__xxsubinterpreters=n/a
-    py_cv_module__xxinterpchannels=n/a
-    py_cv_module__xxinterpqueues=n/a
+    py_cv_module__interpreters=n/a
+    py_cv_module__interpchannels=n/a
+    py_cv_module__interpqueues=n/a
     py_cv_module_grp=n/a
     py_cv_module_pwd=n/a
     py_cv_module_resource=n/a
@@ -29126,20 +29126,20 @@ then :
 fi
 
 
-        if test "$py_cv_module__xxsubinterpreters" != "n/a"
+        if test "$py_cv_module__interpreters" != "n/a"
 then :
-  py_cv_module__xxsubinterpreters=yes
+  py_cv_module__interpreters=yes
 fi
-   if test "$py_cv_module__xxsubinterpreters" = yes; then
-  MODULE__XXSUBINTERPRETERS_TRUE=
-  MODULE__XXSUBINTERPRETERS_FALSE='#'
+   if test "$py_cv_module__interpreters" = yes; then
+  MODULE__INTERPRETERS_TRUE=
+  MODULE__INTERPRETERS_FALSE='#'
 else
-  MODULE__XXSUBINTERPRETERS_TRUE='#'
-  MODULE__XXSUBINTERPRETERS_FALSE=
+  MODULE__INTERPRETERS_TRUE='#'
+  MODULE__INTERPRETERS_FALSE=
 fi
 
-  as_fn_append MODULE_BLOCK "MODULE__XXSUBINTERPRETERS_STATE=$py_cv_module__xxsubinterpreters$as_nl"
-  if test "x$py_cv_module__xxsubinterpreters" = xyes
+  as_fn_append MODULE_BLOCK "MODULE__INTERPRETERS_STATE=$py_cv_module__interpreters$as_nl"
+  if test "x$py_cv_module__interpreters" = xyes
 then :
 
 
@@ -29148,20 +29148,20 @@ then :
 fi
 
 
-        if test "$py_cv_module__xxinterpchannels" != "n/a"
+        if test "$py_cv_module__interpchannels" != "n/a"
 then :
-  py_cv_module__xxinterpchannels=yes
+  py_cv_module__interpchannels=yes
 fi
-   if test "$py_cv_module__xxinterpchannels" = yes; then
-  MODULE__XXINTERPCHANNELS_TRUE=
-  MODULE__XXINTERPCHANNELS_FALSE='#'
+   if test "$py_cv_module__interpchannels" = yes; then
+  MODULE__INTERPCHANNELS_TRUE=
+  MODULE__INTERPCHANNELS_FALSE='#'
 else
-  MODULE__XXINTERPCHANNELS_TRUE='#'
-  MODULE__XXINTERPCHANNELS_FALSE=
+  MODULE__INTERPCHANNELS_TRUE='#'
+  MODULE__INTERPCHANNELS_FALSE=
 fi
 
-  as_fn_append MODULE_BLOCK "MODULE__XXINTERPCHANNELS_STATE=$py_cv_module__xxinterpchannels$as_nl"
-  if test "x$py_cv_module__xxinterpchannels" = xyes
+  as_fn_append MODULE_BLOCK "MODULE__INTERPCHANNELS_STATE=$py_cv_module__interpchannels$as_nl"
+  if test "x$py_cv_module__interpchannels" = xyes
 then :
 
 
@@ -29170,20 +29170,20 @@ then :
 fi
 
 
-        if test "$py_cv_module__xxinterpqueues" != "n/a"
+        if test "$py_cv_module__interpqueues" != "n/a"
 then :
-  py_cv_module__xxinterpqueues=yes
+  py_cv_module__interpqueues=yes
 fi
-   if test "$py_cv_module__xxinterpqueues" = yes; then
-  MODULE__XXINTERPQUEUES_TRUE=
-  MODULE__XXINTERPQUEUES_FALSE='#'
+   if test "$py_cv_module__interpqueues" = yes; then
+  MODULE__INTERPQUEUES_TRUE=
+  MODULE__INTERPQUEUES_FALSE='#'
 else
-  MODULE__XXINTERPQUEUES_TRUE='#'
-  MODULE__XXINTERPQUEUES_FALSE=
+  MODULE__INTERPQUEUES_TRUE='#'
+  MODULE__INTERPQUEUES_FALSE=
 fi
 
-  as_fn_append MODULE_BLOCK "MODULE__XXINTERPQUEUES_STATE=$py_cv_module__xxinterpqueues$as_nl"
-  if test "x$py_cv_module__xxinterpqueues" = xyes
+  as_fn_append MODULE_BLOCK "MODULE__INTERPQUEUES_STATE=$py_cv_module__interpqueues$as_nl"
+  if test "x$py_cv_module__interpqueues" = xyes
 then :
 
 
@@ -31532,16 +31532,16 @@ if test -z "${MODULE__TYPING_TRUE}" && test -z "${MODULE__TYPING_FALSE}"; then
   as_fn_error $? "conditional \"MODULE__TYPING\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${MODULE__XXSUBINTERPRETERS_TRUE}" && test -z "${MODULE__XXSUBINTERPRETERS_FALSE}"; then
-  as_fn_error $? "conditional \"MODULE__XXSUBINTERPRETERS\" was never defined.
+if test -z "${MODULE__INTERPRETERS_TRUE}" && test -z "${MODULE__INTERPRETERS_FALSE}"; then
+  as_fn_error $? "conditional \"MODULE__INTERPRETERS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${MODULE__XXINTERPCHANNELS_TRUE}" && test -z "${MODULE__XXINTERPCHANNELS_FALSE}"; then
-  as_fn_error $? "conditional \"MODULE__XXINTERPCHANNELS\" was never defined.
+if test -z "${MODULE__INTERPCHANNELS_TRUE}" && test -z "${MODULE__INTERPCHANNELS_FALSE}"; then
+  as_fn_error $? "conditional \"MODULE__INTERPCHANNELS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${MODULE__XXINTERPQUEUES_TRUE}" && test -z "${MODULE__XXINTERPQUEUES_FALSE}"; then
-  as_fn_error $? "conditional \"MODULE__XXINTERPQUEUES\" was never defined.
+if test -z "${MODULE__INTERPQUEUES_TRUE}" && test -z "${MODULE__INTERPQUEUES_FALSE}"; then
+  as_fn_error $? "conditional \"MODULE__INTERPQUEUES\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${MODULE__ZONEINFO_TRUE}" && test -z "${MODULE__ZONEINFO_FALSE}"; then
index 7877ef45c2e500cac66e4bcd0688b56af958f2af..719b8d3a9573b936b0571a9f0bc0c2f1397ee847 100644 (file)
@@ -7433,9 +7433,9 @@ AS_CASE([$ac_sys_system],
       [_posixsubprocess],
       [_scproxy],
       [_tkinter],
-      [_xxsubinterpreters],
-      [_xxinterpchannels],
-      [_xxinterpqueues],
+      [_interpreters],
+      [_interpchannels],
+      [_interpqueues],
       [grp],
       [pwd],
       [resource],
@@ -7558,9 +7558,9 @@ PY_STDLIB_MOD_SIMPLE([_random])
 PY_STDLIB_MOD_SIMPLE([select])
 PY_STDLIB_MOD_SIMPLE([_struct])
 PY_STDLIB_MOD_SIMPLE([_typing])
-PY_STDLIB_MOD_SIMPLE([_xxsubinterpreters])
-PY_STDLIB_MOD_SIMPLE([_xxinterpchannels])
-PY_STDLIB_MOD_SIMPLE([_xxinterpqueues])
+PY_STDLIB_MOD_SIMPLE([_interpreters])
+PY_STDLIB_MOD_SIMPLE([_interpchannels])
+PY_STDLIB_MOD_SIMPLE([_interpqueues])
 PY_STDLIB_MOD_SIMPLE([_zoneinfo])
 
 dnl multiprocessing modules