Skip to content

Sub interpreters - #256

Open
lelit wants to merge 20 commits into
masterfrom
sub-interpreters
Open

lelit wants to merge 20 commits into
masterfrom
sub-interpreters

Conversation

@lelit

@lelit lelit commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

This implements PEP-684, and thus issue #226.

VestniK and others added 20 commits November 1, 2026 10:15
Each static type is uniq and global for all subinterpreters and can't
access cached PyObjects. Decoder do use cached PyObjecs and must access
cache stored in module rather than in static variables.

Static type it can't access "proper module" due to its "per process
singleton nature". The recomended way is to turn static types into heap
types in order to use cached PyObjects.
This is a first step in the direction of subinterpreter compatibility.
Is's recommended to keep such caches in the module state rather then
process wide globals:

https://docs.python.org/3/howto/isolating-extensions.html#managing-per-module-state

Dedicated struct was created which can later on be stored in the module
state. It can't be done right now since those members are accessed from
static types initialization code which doesn't have access to the module.
Turning such static types into heap types is also subinterpreter
compatibility prerequisite:
https://docs.python.org/3/howto/isolating-extensions.html#heap-types
I'm not really sure this is required, because AFAIU all the API is
actually static, and apparently shared by all interpreters... Anyway,
this seems clearer.
Both are heap types now: their instances hold a reference to the type and,
being GC-tracked, must be untracked before being freed. Their dealloc was
only calling tp_free(), leaking one reference to the type per instance and,
on debug interpreters, emitting a ResourceWarning.
Python 3.10 is EOL since 2026-10-01, and its not easy for me to even
test for it locally.

This also reverts commit 82b1453.
Its configuration still referenced Python 3.9 and 3.10, a good evidence
that it was abandoned lot of time ago.
@lelit

lelit commented Nov 2, 2026

Copy link
Copy Markdown
Contributor Author

Ok, this is in good shape, as far as I can tell.
I decided to drop support for Python 3.10 (EOL since October 1st) because the attempt I made to cover it failed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants