mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-135645: Added supports_isolated_interpreters
to sys.implementation
(#135667)
Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
This commit is contained in:
parent
f4911258a8
commit
8ca1e4d846
4 changed files with 36 additions and 0 deletions
|
@ -1185,6 +1185,15 @@ always available. Unless explicitly noted otherwise, all variables are read-only
|
||||||
``cache_tag`` is set to ``None``, it indicates that module caching should
|
``cache_tag`` is set to ``None``, it indicates that module caching should
|
||||||
be disabled.
|
be disabled.
|
||||||
|
|
||||||
|
*supports_isolated_interpreters* is a boolean value, whether
|
||||||
|
this implementation supports multiple isolated interpreters.
|
||||||
|
It is ``True`` for CPython on most platforms. Platforms with
|
||||||
|
this support implement the low-level :mod:`!_interpreters` module.
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
:pep:`684`, :pep:`734`, and :mod:`concurrent.interpreters`.
|
||||||
|
|
||||||
:data:`sys.implementation` may contain additional attributes specific to
|
:data:`sys.implementation` may contain additional attributes specific to
|
||||||
the Python implementation. These non-standard attributes must start with
|
the Python implementation. These non-standard attributes must start with
|
||||||
an underscore, and are not described here. Regardless of its contents,
|
an underscore, and are not described here. Regardless of its contents,
|
||||||
|
@ -1194,6 +1203,9 @@ always available. Unless explicitly noted otherwise, all variables are read-only
|
||||||
|
|
||||||
.. versionadded:: 3.3
|
.. versionadded:: 3.3
|
||||||
|
|
||||||
|
.. versionchanged:: 3.14
|
||||||
|
Added ``supports_isolated_interpreters`` field.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
The addition of new required attributes must go through the normal PEP
|
The addition of new required attributes must go through the normal PEP
|
||||||
|
|
|
@ -1074,6 +1074,7 @@ class SysModuleTest(unittest.TestCase):
|
||||||
self.assertHasAttr(sys.implementation, 'version')
|
self.assertHasAttr(sys.implementation, 'version')
|
||||||
self.assertHasAttr(sys.implementation, 'hexversion')
|
self.assertHasAttr(sys.implementation, 'hexversion')
|
||||||
self.assertHasAttr(sys.implementation, 'cache_tag')
|
self.assertHasAttr(sys.implementation, 'cache_tag')
|
||||||
|
self.assertHasAttr(sys.implementation, 'supports_isolated_interpreters')
|
||||||
|
|
||||||
version = sys.implementation.version
|
version = sys.implementation.version
|
||||||
self.assertEqual(version[:2], (version.major, version.minor))
|
self.assertEqual(version[:2], (version.major, version.minor))
|
||||||
|
@ -1087,6 +1088,15 @@ class SysModuleTest(unittest.TestCase):
|
||||||
self.assertEqual(sys.implementation.name,
|
self.assertEqual(sys.implementation.name,
|
||||||
sys.implementation.name.lower())
|
sys.implementation.name.lower())
|
||||||
|
|
||||||
|
# https://peps.python.org/pep-0734
|
||||||
|
sii = sys.implementation.supports_isolated_interpreters
|
||||||
|
self.assertIsInstance(sii, bool)
|
||||||
|
if test.support.check_impl_detail(cpython=True):
|
||||||
|
if test.support.is_emscripten or test.support.is_wasi:
|
||||||
|
self.assertFalse(sii)
|
||||||
|
else:
|
||||||
|
self.assertTrue(sii)
|
||||||
|
|
||||||
@test.support.cpython_only
|
@test.support.cpython_only
|
||||||
def test_debugmallocstats(self):
|
def test_debugmallocstats(self):
|
||||||
# Test sys._debugmallocstats()
|
# Test sys._debugmallocstats()
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Added ``supports_isolated_interpreters`` field to
|
||||||
|
:data:`sys.implementation`.
|
|
@ -3607,6 +3607,18 @@ make_impl_info(PyObject *version_info)
|
||||||
goto error;
|
goto error;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// PEP-734
|
||||||
|
#if defined(__wasi__) || defined(__EMSCRIPTEN__)
|
||||||
|
// It is not enabled on WASM builds just yet
|
||||||
|
value = Py_False;
|
||||||
|
#else
|
||||||
|
value = Py_True;
|
||||||
|
#endif
|
||||||
|
res = PyDict_SetItemString(impl_info, "supports_isolated_interpreters", value);
|
||||||
|
if (res < 0) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
/* dict ready */
|
/* dict ready */
|
||||||
|
|
||||||
ns = _PyNamespace_New(impl_info);
|
ns = _PyNamespace_New(impl_info);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue