Open
Description
I'm moving the TODO, etc. to https://github.com/ericsnowcurrently/multi-core-python/wiki/0-The-Plan
Here's a rough TODO list, sort of in order (a lot can be done in parallel).
Note that most of these items fall out of Tools/c-analyzer/cpython/globals-to-fix.tsv. (Run ./python Tools/c-analyzer/table-file.py Tools/c-analyzer/cpython/globals-to-fix.tsv
to get counts.)
Primary Tasks
- analysis (summary)
- proposal: "A Per-Interpreter GIL"
- initial python-dev discussion
- clarify next steps with the steering council
- write the proposal (PEP 684)
- accepted
- tooling (to identify global variables)
- analyze requirements & make design
- implement the tool (Tools/c-analyzer)
- re-enable CI check to prevent addition of more globals (may need fixes)
- resolve main blockers
- objects exposed in public C-API (solve with immortal objects)
- shared vs. per-interpreter allocators (solve with mimalloc)
- impact on extension maintainers (solve with docs, work with numpy)
- implementation
- prerequisites
- consolidate globals (#81057)
- ... (move a bunch of stuff into
_PyRuntimeState
) - ... (statically init a bunch of global objects)
- (maybe?) move some state from
PyInterpreterState
to_PyRuntimeState
- drop
_Py_IDENTIFIER()
in extensions (or modify it to use a statically initialized str?)- Modules/_asynciomodule.c
- Modules/_ctypes/callbacks.c
- Modules/_ctypes/callproc.c
- Modules/_ctypes/_ctypes.c
- Modules/_ctypes/stgdict.c
- Modules/_cursesmodule.c
- Modules/_datetimemodule.c
- Modules/_elementtree.c
- Modules/_json.c
- Modules/ossaudiodev.c
- Modules/_testcapimodule.c
- Programs/_testembed.c
- statically init latin-1 chars
- statically init currently cached str objects
- deal with PyArg_Parser (#90928, #82322, faster-cpython#281)
- pull remaining objects into
_PyRuntimeState
- pull remaining state into
_PyRuntimeState
- ... (move a bunch of stuff into
- prep for per-interpreter state
- solve per-interpreter state for core/builtin static types (e.g. dynamic lookup for some attrs)
- solve for extensions
- make some vars atomic?
- convert stdlib extensions to PEP 630 (see bpo-40077, PEP 687 & the SC discussion)
- add new C-API and implement runtime machinery
- ...
- move state (incl. GIL) to
PyInterpreterState
- enforce restrictions on importing extensions...
- finally: move some state/objects to
PyInterpreterState
- 💥 move the GIL to
PyInterpreterState
💥
Solutions for Blockers
Immortal Objects:
- analysis, design, and initial discussion (bpo-40255)
- implement basic solution (gh-19474)
- run benchmarks (incl. with all objects immortalized at end of runtime init)
- (maybe?) prepare a contingency plan for if we don't end up with immortal objects
- write a proposal (PEP 683)
- present at the language summit
- enumerate other strategies for getting back to performance neutral
- implement them
- PEP accepted
- merge implementation
mimalloc (thread-safe, performant allocator):
- get mimalloc working as CPython's allocator (Christian: ...)
- add static analyzer support (ASAN, valgrind) (Daan)
- resolve problem with leaking large blocks (Daan/Christian)
- resolve PGO issues on Windows (Eric: contact MSVC team)
- merge the implementation
- sort out GIL guarantees for allocator API
Reduce Impact on Extension Maintainers:
- add docs (i.e. copy PEP 630)
- (probably) add some new C-API to solve pain points
- work with numpy, specifically, to add support for multiple interpreters
- work with cython
Secondary Tasks
- finish "c-analyzer.py data count"
- fix "c-analyzer.py data check" & add to CI
- statically init other immutables
- ...
Other Related Items
- PEP 554 (stdlib module to expose multiple interpreters)
- help numpy, cython, etc.
- PEP: add Public C-API as replacement for
_Py_IDENTIFIER()
(@zooba's staticstr?) - "subinterpreters" project: Subinterpreters (view)
Metadata
Metadata
Assignees
Labels
No labels