Repository navigation
Sub interpreters - #256
Open
lelit wants to merge 20 commits into
Open
Sub interpreters#256lelit wants to merge 20 commits into
lelit wants to merge 20 commits into
Conversation
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.
See #227 (review) for an explanation.
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.
Contributor
Author
|
Ok, this is in good shape, as far as I can tell. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This implements PEP-684, and thus issue #226.