mirror of
https://github.com/python/cpython.git
synced 2025-08-22 17:55:18 +00:00
gh-129405: Fix doc for Py_mod_multiple_interpreters default, and add test (GH-129406)
This commit is contained in:
parent
805839021b
commit
fc8d2cba54
3 changed files with 47 additions and 14 deletions
|
@ -415,7 +415,7 @@ The available slot types are:
|
|||
in one module definition.
|
||||
|
||||
If ``Py_mod_multiple_interpreters`` is not specified, the import
|
||||
machinery defaults to ``Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED``.
|
||||
machinery defaults to ``Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED``.
|
||||
|
||||
.. versionadded:: 3.12
|
||||
|
||||
|
|
|
@ -2386,8 +2386,10 @@ class SubinterpImportTests(unittest.TestCase):
|
|||
|
||||
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
|
||||
def test_multi_init_extension_compat(self):
|
||||
# Module with Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
|
||||
module = '_testmultiphase'
|
||||
require_extension(module)
|
||||
|
||||
if not Py_GIL_DISABLED:
|
||||
with self.subTest(f'{module}: not strict'):
|
||||
self.check_compatible_here(module, strict=False)
|
||||
|
@ -2398,6 +2400,8 @@ class SubinterpImportTests(unittest.TestCase):
|
|||
|
||||
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
|
||||
def test_multi_init_extension_non_isolated_compat(self):
|
||||
# Module with Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED
|
||||
# and Py_MOD_GIL_NOT_USED
|
||||
modname = '_test_non_isolated'
|
||||
filename = _testmultiphase.__file__
|
||||
module = import_extension_from_file(modname, filename)
|
||||
|
@ -2413,20 +2417,31 @@ class SubinterpImportTests(unittest.TestCase):
|
|||
|
||||
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
|
||||
def test_multi_init_extension_per_interpreter_gil_compat(self):
|
||||
modname = '_test_shared_gil_only'
|
||||
|
||||
# _test_shared_gil_only:
|
||||
# Explicit Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED (default)
|
||||
# and Py_MOD_GIL_NOT_USED
|
||||
# _test_no_multiple_interpreter_slot:
|
||||
# No Py_mod_multiple_interpreters slot
|
||||
# and Py_MOD_GIL_NOT_USED
|
||||
for modname in ('_test_shared_gil_only',
|
||||
'_test_no_multiple_interpreter_slot'):
|
||||
with self.subTest(modname=modname):
|
||||
|
||||
filename = _testmultiphase.__file__
|
||||
module = import_extension_from_file(modname, filename)
|
||||
|
||||
require_extension(module)
|
||||
with self.subTest(f'{modname}: isolated, strict'):
|
||||
self.check_incompatible_here(modname, filename, isolated=True)
|
||||
self.check_incompatible_here(modname, filename,
|
||||
isolated=True)
|
||||
with self.subTest(f'{modname}: not isolated, strict'):
|
||||
self.check_compatible_here(modname, filename,
|
||||
strict=True, isolated=False)
|
||||
if not Py_GIL_DISABLED:
|
||||
with self.subTest(f'{modname}: not isolated, not strict'):
|
||||
self.check_compatible_here(modname, filename,
|
||||
strict=False, isolated=False)
|
||||
self.check_compatible_here(
|
||||
modname, filename, strict=False, isolated=False)
|
||||
|
||||
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
|
||||
def test_python_compat(self):
|
||||
|
|
|
@ -969,3 +969,21 @@ PyInit__test_shared_gil_only(void)
|
|||
{
|
||||
return PyModuleDef_Init(&shared_gil_only_def);
|
||||
}
|
||||
|
||||
|
||||
static PyModuleDef_Slot no_multiple_interpreter_slot_slots[] = {
|
||||
{Py_mod_exec, execfunc},
|
||||
{Py_mod_gil, Py_MOD_GIL_NOT_USED},
|
||||
{0, NULL},
|
||||
};
|
||||
|
||||
static PyModuleDef no_multiple_interpreter_slot_def = TEST_MODULE_DEF(
|
||||
"_test_no_multiple_interpreter_slot",
|
||||
no_multiple_interpreter_slot_slots,
|
||||
testexport_methods);
|
||||
|
||||
PyMODINIT_FUNC
|
||||
PyInit__test_no_multiple_interpreter_slot(void)
|
||||
{
|
||||
return PyModuleDef_Init(&no_multiple_interpreter_slot_def);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue