classification
Title: [subinterpreters] Pull all interpreter-global objects into one place.
Type: Stage: patch review
Components: Interpreter Core Versions: Python 3.11
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: eric.snow Nosy List: Mark.Shannon, eric.snow, ncoghlan, vstinner
Priority: normal Keywords: patch

Created on 2021-11-23 22:40 by eric.snow, last changed 2021-11-23 22:42 by eric.snow.

Pull Requests
URL Status Linked Edit
PR 29737 closed eric.snow, 2021-11-23 22:42
Messages (1)
msg406894 - (view) Author: Eric Snow (eric.snow) * (Python committer) Date: 2021-11-23 22:40
Currently there are still a bunch of PyObject static variables in the code that need to become per-interpreter.  This includes quite a few static types (e.g. in Objects/*.c), as well as freelists and caches.  To make the transition easier I'd like to move all those objects under a single struct.

When I started consolidating globals a few years back, my plan was to turn static variables into fields on the _PyRuntimeState struct, where they can later be moved down into PyInterpreterState and become per-interpreter.  That has worked fine but the mental indirection in that process is clunky.  Consequently, in practice we've ended up just moving things directly to PyInterpreterState, even in cases where making something per-interpreter is premature.

So at this point I'm planning on a slightly different approach.  We'll move the objects (and other state) to PyInterpreterState as pointer fields, and then use the main interpreter's pointers in the corresponding fields in all subinterpreters.  Thus it will be equivalent to having a single global state.  However, it will go smoother down the road when we make all that state unique to each interpreter.
History
Date User Action Args
2021-11-23 22:42:23eric.snowsetkeywords: + patch
stage: patch review
pull_requests: + pull_request27975
2021-11-23 22:40:54eric.snowcreate