Skip to content
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-98608: Change _Py_NewInterpreter() to _Py_NewInterpreterFromConfig() #98609

Merged
merged 16 commits into from
Oct 26, 2022

Conversation

ericsnowcurrently
Copy link
Member

@ericsnowcurrently ericsnowcurrently commented Oct 24, 2022

(Note that this PR adds "private" symbols. We'll probably make them public, and add docs, in a separate change.)

We do the following:

  1. change the argument to a new _PyInterpreterConfig struct
  2. rename the function to _Py_NewInterpreterFromConfig(), inspired by Py_InitializeFromConfig() (takes a _PyInterpreterConfig instead of isolated_subinterpreter)
  3. split up the boolean isolated_subinterpreter into the corresponding multiple granular settings
    • allow_fork
    • allow_subprocess
    • allow_threads
  4. add PyInterpreterState.feature_flags to store those settings
  5. add a function for checking if a feature is enabled on an opaque PyInterpreterState *
  6. drop PyConfig._isolated_interpreter

The current default (Py_NewInterpeter() and Py_Initialize*()) allows fork, subprocess, and threads and the optional "isolated" interpreter disables all three. None of that changes here.

Note that the given _PyInterpreterConfig will not be used (nor preserved, for now) outside _Py_NewInterpreterFromConfig(). This contrasts with how PyConfig is currently preserved, used, and modified outside Py_InitializeFromConfig(). I'd rather just avoid that mess from the start for _PyInterpreterConfig.

This change allows us to follow up with a number of improvements (e.g. stop disallowing subprocess and support disallowing exec instead).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants