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.
|
in one module definition.
|
||||||
|
|
||||||
If ``Py_mod_multiple_interpreters`` is not specified, the import
|
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
|
.. versionadded:: 3.12
|
||||||
|
|
||||||
|
|
|
@ -2386,8 +2386,10 @@ class SubinterpImportTests(unittest.TestCase):
|
||||||
|
|
||||||
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
|
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
|
||||||
def test_multi_init_extension_compat(self):
|
def test_multi_init_extension_compat(self):
|
||||||
|
# Module with Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
|
||||||
module = '_testmultiphase'
|
module = '_testmultiphase'
|
||||||
require_extension(module)
|
require_extension(module)
|
||||||
|
|
||||||
if not Py_GIL_DISABLED:
|
if not Py_GIL_DISABLED:
|
||||||
with self.subTest(f'{module}: not strict'):
|
with self.subTest(f'{module}: not strict'):
|
||||||
self.check_compatible_here(module, strict=False)
|
self.check_compatible_here(module, strict=False)
|
||||||
|
@ -2398,6 +2400,8 @@ class SubinterpImportTests(unittest.TestCase):
|
||||||
|
|
||||||
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
|
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
|
||||||
def test_multi_init_extension_non_isolated_compat(self):
|
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'
|
modname = '_test_non_isolated'
|
||||||
filename = _testmultiphase.__file__
|
filename = _testmultiphase.__file__
|
||||||
module = import_extension_from_file(modname, filename)
|
module = import_extension_from_file(modname, filename)
|
||||||
|
@ -2413,20 +2417,31 @@ class SubinterpImportTests(unittest.TestCase):
|
||||||
|
|
||||||
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
|
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
|
||||||
def test_multi_init_extension_per_interpreter_gil_compat(self):
|
def test_multi_init_extension_per_interpreter_gil_compat(self):
|
||||||
modname = '_test_shared_gil_only'
|
|
||||||
filename = _testmultiphase.__file__
|
|
||||||
module = import_extension_from_file(modname, filename)
|
|
||||||
|
|
||||||
require_extension(module)
|
# _test_shared_gil_only:
|
||||||
with self.subTest(f'{modname}: isolated, strict'):
|
# Explicit Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED (default)
|
||||||
self.check_incompatible_here(modname, filename, isolated=True)
|
# and Py_MOD_GIL_NOT_USED
|
||||||
with self.subTest(f'{modname}: not isolated, strict'):
|
# _test_no_multiple_interpreter_slot:
|
||||||
self.check_compatible_here(modname, filename,
|
# No Py_mod_multiple_interpreters slot
|
||||||
strict=True, isolated=False)
|
# and Py_MOD_GIL_NOT_USED
|
||||||
if not Py_GIL_DISABLED:
|
for modname in ('_test_shared_gil_only',
|
||||||
with self.subTest(f'{modname}: not isolated, not strict'):
|
'_test_no_multiple_interpreter_slot'):
|
||||||
self.check_compatible_here(modname, filename,
|
with self.subTest(modname=modname):
|
||||||
strict=False, isolated=False)
|
|
||||||
|
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)
|
||||||
|
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)
|
||||||
|
|
||||||
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
|
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
|
||||||
def test_python_compat(self):
|
def test_python_compat(self):
|
||||||
|
|
|
@ -969,3 +969,21 @@ PyInit__test_shared_gil_only(void)
|
||||||
{
|
{
|
||||||
return PyModuleDef_Init(&shared_gil_only_def);
|
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