Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork34k
gh-120321: Add gi_state, cr_state, and ag_state attributes#144409
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
Add `gi_state`, `cr_state`, and `ag_state` attributes to generators,coroutines, and async generators respectively. These attributes returnthe current state as a string (e.g., `GEN_RUNNING`, `CORO_SUSPENDED`).The `inspect.getgeneratorstate()`, `inspect.getcoroutinestate()`, and`inspect.getasyncgenstate()` functions now return these attributesdirectly.This is in preparation for making `gi_frame` thread-safe, which mayinvolve stop-the-world synchronization. The new state attributes avoidpotential performance cliffs in `inspect.getgeneratorstate()` andsimilar functions by not requiring frame access.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
| | | | one of ``GEN_CREATED``, | | ||
| | | | ``GEN_RUNNING``, | | ||
| | | | ``GEN_SUSPENDED``, or | | ||
| | | | ``GEN_CLOSED`` | |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Please add a.. versionchanged:: next markup at the end of the table to mention that gi_state, ag_state, cr_state are added in Python 3.15.
| FRAME_SUSPENDED_YIELD_FROM = -2, | ||
| FRAME_SUSPENDED_YIELD_FROM_LOCKED = -1, | ||
| FRAME_EXECUTING = 0, | ||
| FRAME_COMPLETED = 1, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Don't forget to mention FRAME_COMPLETED removal in the commit message. I'm fine with the removal, the constant was only used in one place: in FRAME_STATE_FINISHED().
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I've edited the PR description and will use that when squash + merging.
Co-authored-by: Kumar Aditya <kumaraditya@python.org>
kumaraditya303 left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
LGTM
7e2c9bd intopython:mainUh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Add
gi_state,cr_state, andag_stateattributes to generators, coroutines, and async generators respectively. These attributes return the current state as a string (e.g.,GEN_RUNNING,CORO_SUSPENDED).The
inspect.getgeneratorstate(),inspect.getcoroutinestate(), andinspect.getasyncgenstate()functions now return these attributes directly.This is in preparation for making
gi_framethread-safe, which may involve stop-the-world synchronization. The new state attributes avoid potential performance cliffs ininspect.getgeneratorstate()and similar functions by not requiring frame access.Also removes unused
FRAME_COMPLETEDstate and renumbers the frame state enum to start at 0 instead of -1.📚 Documentation preview 📚:https://cpython-previews--144409.org.readthedocs.build/