-
-
Notifications
You must be signed in to change notification settings - Fork 30.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gh-117953: Track Extra Details in Global Extensions Cache #118532
Merged
ericsnowcurrently
merged 24 commits into
python:main
from
ericsnowcurrently:extensions-cache-better-tracking
May 4, 2024
Merged
gh-117953: Track Extra Details in Global Extensions Cache #118532
ericsnowcurrently
merged 24 commits into
python:main
from
ericsnowcurrently:extensions-cache-better-tracking
May 4, 2024
Conversation
This file contains 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
ericsnowcurrently
requested review from
kumaraditya303,
brettcannon,
ncoghlan and
warsaw
as code owners
May 3, 2024 01:37
ericsnowcurrently
removed request for
brettcannon,
warsaw,
ncoghlan and
kumaraditya303
May 3, 2024 01:37
SonicField
pushed a commit
to SonicField/cpython
that referenced
this pull request
May 8, 2024
…ongh-118532) We have only been tracking each module's PyModuleDef. However, there are some problems with that. For example, in some cases we load single-phase init extension modules from def->m_base.m_init or def->m_base.m_copy, but if multiple modules share a def then we can end up with unexpected behavior. With this change, we track the following: * PyModuleDef (same as before) * for some modules, its init function or a copy of its __dict__, but specific to that module * whether it is a builtin/core module or a "dynamic" extension * the interpreter (ID) that owns the cached __dict__ (only if cached) This also makes it easier to remember the module's kind (e.g. single-phase init) and if loading it previously failed, which I'm doing separately.
We're getting Does it sound like a CPython or ujson problem? |
Sorry for the delay. PyCon was a bit distracting. :) I'll take a look. |
This was referenced May 25, 2024
ericsnowcurrently
added a commit
that referenced
this pull request
May 25, 2024
The assertion was added in gh-118532 but was based on the invalid assumption that PyState_FindModule() would only be called with an already-initialized module def. I've added a test to make sure we don't make that assumption again.
miss-islington
pushed a commit
to miss-islington/cpython
that referenced
this pull request
May 27, 2024
…ongh-119561) The assertion was added in pythongh-118532 but was based on the invalid assumption that PyState_FindModule() would only be called with an already-initialized module def. I've added a test to make sure we don't make that assumption again. (cherry picked from commit 0c5ebe1) Co-authored-by: Eric Snow <[email protected]>
ericsnowcurrently
added a commit
that referenced
this pull request
May 27, 2024
…119561) (gh-119632) The assertion was added in gh-118532 but was based on the invalid assumption that PyState_FindModule() would only be called with an already-initialized module def. I've added a test to make sure we don't make that assumption again. (cherry picked from commit 0c5ebe1) Co-authored-by: Eric Snow <[email protected]>
estyxx
pushed a commit
to estyxx/cpython
that referenced
this pull request
Jul 17, 2024
…ongh-119561) The assertion was added in pythongh-118532 but was based on the invalid assumption that PyState_FindModule() would only be called with an already-initialized module def. I've added a test to make sure we don't make that assumption again.
This was referenced Sep 8, 2024
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.
We have only been tracking each module's
PyModuleDef
. However, there are some problems with that. For example, in some cases we load single-phase init extension modules fromdef->m_base.m_init
ordef->m_base.m_copy
, but if multiple modules share a def then we can end up with unexpected behavior.With this change, we track the following:
PyModuleDef
(same as before)__dict__
, but specific to that module__dict__
(only if cached)This also makes it easier to remember the module's kind (e.g. single-phase init) and if loading it previously failed, which I'm doing in another PR.