python / python/cpython

Improve Py_mod_multiple_interpreters and Py_mod_gil Usability

未關閉
#132,861 3 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

3.15 interpreter-core topic-C-API topic-free-threading topic-subinterpreters type-feature
主要語言
Python
星號
77.2k
分支
35.9k
PR 合併指標
PR 指標待擷取

描述

Feature or enhancement

Proposal:

Here are some deficiencies:

  • the slot name "Py_mod_multiple_interpreters" is a bit long
  • the "Py_MOD_MULTIPLE_INTERPRETERS_*" slot value names are a bit long
  • the slot name "Py_mod_gil" is overly coupled to the GIL (it's really about thread safety)
  • the difference between Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED and Py_MOD_PER_INTERPRETER_GIL_SUPPORTED is unclear
  • Py_MOD_PER_INTERPRETER_GIL_SUPPORTED applies to the vast majority of extensions and should be the default
  • Py_mod_gil doesn't have an option that explicitly covers the case where an external dependency is not thread-safe
  • currently Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED implies an external dependency is not thread-safe and/or isolated to each interpreter; it should be the other way around (and be a synonym for Py_MOD_PER_INTERPRETER_GIL_SUPPORTED), which would introduce a need for a Py_MOD_PER_INTERPRETER_GIL_NOT_SUPPORTED

We could take a simple approach, working with the existing slots:

  • (maybe) shorten the names
  • add Py_MOD_PER_INTERPRETER_GIL_NOT_SUPPORTED
  • add something like Py_MOD_GIL_USED_FOR_EXTERNAL

I think we could do better, by replacing the existing slots with new ones that focus explicitly on what we care about:

  • new module def slot: Py_mod_isolation
    • Py_MOD_NOT_ISOLATED - the module has process-global state and/or objects (e.g. static types)
    • Py_MOD_ISOLATED (default) - the module's state/objects have been isolated to the module (i.e interpreter)
  • new module def slot: Py_mod_threadsafe
    • Py_MOD_NOT_THREADSAFE (default) - the module's own state/code is not thread-safe
    • Py_MOD_THREADSAFE - the module's state/code are thread-safe; external dependencies are covered by Py_mod_external_libs
  • new module def slot: Py_mod_external_libs
    • Py_MOD_EXTERN_NOT_THREADSAFE - at least one external dependency is not thread-safe (may be used without the GIL held)
    • Py_MOD_EXTERN_NOT_ISOLATED - at least one external dependency is not isolated to the module object (i.e. interpreter)
    • Py_MOD_EXTERN_ISOLATED (default) - all external dependencies are isolated and using them is thread-safe
  • for Py_mod_isolation and Py_mod_threadsafe, external dependencies are covered by Py_mod_external_libs
  • deprecate Py_mod_multiple_interpreters slot
  • deprecate Py_mod_gil slot

Regarding the defaults, for Py_mod_isolation, multi-phase init implies isolation (per PEP 489). For Py_mod_external_libs, we assume that the vast majority of modules will not have problematic dependencies.

Equivalents to current usage:

Py_mod_threadsafe Py_mod_external_libs Py_mod_gil
Py_MOD_NOT_THREADSAFE * Py_MOD_GIL_USED
Py_MOD_THREADSAFE Py_MOD_EXTERNAL_NOT_THREADSAFE Py_MOD_GIL_USED
Py_MOD_THREADSAFE Py_MOD_EXTERNAL_NOT_ISOLATED Py_MOD_GIL_NOT_USED
Py_MOD_THREADSAFE Py_MOD_EXTERNAL_ISOLATED Py_MOD_GIL_NOT_USED
Py_mod_isolation Py_mod_external_libs Py_mod_multiple_interpreters
Py_MOD_NOT_ISOLATED * Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED
Py_MOD_ISOLATED Py_MOD_EXTERNAL_NOT_THREADSAFE Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED
Py_MOD_ISOLATED Py_MOD_EXTERNAL_NOT_ISOLATED Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED
Py_MOD_ISOLATED Py_MOD_EXTERNAL_ISOLATED Py_MOD_PER_INTERPRETER_GIL_SUPPORTED

CC @encukou

Has this already been discussed elsewhere?

No response given

Links to previous discussion of this feature:

No response

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

該 issue 未指定原始碼檔案或測試;首先找出現有的 Py_mod_multiple_interpreters 和 Py_mod_gil slot 定義,並檢視它們目前的行為。先與維護者確定提議的 slot 名稱、預設值和 deprecations;完成這項工作需要一個已達成共識的設計,以及相應的實作和測試。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
python
領域
backend
Issue 類型
功能
難度
5/5
預估耗時
一週以上
活躍度
停滯
描述清晰度
需要釐清
新手友好度
25/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。