Closed
Description
PEP 489 is clear that extension modules implementing multi-phase init are expected to support use in multiple interpreters. However, there are two situations where that mandate isn't sufficient:
- PEP 684 introduces a per-interpreter GIL, where there is an additional thread-safety constraint beyond support for multiple interpreters
- the HPy project implies modules with multi-phase init but not necessarily supporting multiple interpreters
In both cases a new module def slot (the same one, in fact) is a correct solution.
For per-interpreter GIL, PEP 684 specifies that we must add a module def slot for opting in to supporting per-interpreter GIL.
For HPy, the situation was pointed out to me by @hodgestar during a conversation at PyCon.
CC @encukou
I propose the following solution:
- add a new
Py_mod_multiple_interpreters
module def slot - interpret the value to indicate support for multiple interpreters and for per-interpreter GIL
- call
_PyImport_CheckSubinterpIncompatibleExtensionAllowed()
when appropriate inPyModule_FromDefAndSpec2()
The slot value may be one of the following:
0
- does not support multiple interpreters (for HPy)1
- supports multiple interpreters (the default)2
- supports per-interpreter GIL
It would probably make sense to define a constant (macro) for each of those.
Linked PRs
Metadata
Metadata
Assignees
Labels
only security fixesonly security fixesDocumentation in the Doc dirDocumentation in the Doc dir(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)A feature request or enhancementA feature request or enhancement
Projects
Status
Done