mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-98608: Change _Py_NewInterpreter() to _Py_NewInterpreterFromConfig() (gh-98609)
(see https://github.com/python/cpython/issues/98608) This change does 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 existing default (see `Py_NewInterpeter()` and `Py_Initialize*()`) allows fork, subprocess, and threads and the optional "isolated" interpreter (see the `_xxsubinterpreters` module) disables all three. None of that changes here; the defaults are preserved. Note that the given `_PyInterpreterConfig` will not be used outside `_Py_NewInterpreterFromConfig()`, nor preserved. This contrasts with how `PyConfig` is currently preserved, used, and even modified outside `Py_InitializeFromConfig()`. I'd rather just avoid that mess from the start for `_PyInterpreterConfig`. We can preserve it later if we find an actual need. This change allows us to follow up with a number of improvements (e.g. stop disallowing subprocess and support disallowing exec instead). (Note that this PR adds "private" symbols. We'll probably make them public, and add docs, in a separate change.)
This commit is contained in:
parent
24c56b4642
commit
f32369480d
21 changed files with 295 additions and 39 deletions
|
@ -681,8 +681,6 @@ static int test_init_from_config(void)
|
|||
|
||||
config.safe_path = 1;
|
||||
|
||||
config._isolated_interpreter = 1;
|
||||
|
||||
putenv("PYTHONINTMAXSTRDIGITS=6666");
|
||||
config.int_max_str_digits = 31337;
|
||||
|
||||
|
@ -1901,6 +1899,18 @@ static int test_unicode_id_init(void)
|
|||
}
|
||||
|
||||
|
||||
static int test_init_main_interpreter_settings(void)
|
||||
{
|
||||
_testembed_Py_Initialize();
|
||||
(void) PyRun_SimpleStringFlags(
|
||||
"import _testinternalcapi, json; "
|
||||
"print(json.dumps(_testinternalcapi.get_interp_settings(0)))",
|
||||
0);
|
||||
Py_Finalize();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifndef MS_WINDOWS
|
||||
#include "test_frozenmain.h" // M_test_frozenmain
|
||||
|
||||
|
@ -2087,6 +2097,7 @@ static struct TestCase TestCases[] = {
|
|||
{"test_run_main_loop", test_run_main_loop},
|
||||
{"test_get_argc_argv", test_get_argc_argv},
|
||||
{"test_init_use_frozen_modules", test_init_use_frozen_modules},
|
||||
{"test_init_main_interpreter_settings", test_init_main_interpreter_settings},
|
||||
|
||||
// Audit
|
||||
{"test_open_code_hook", test_open_code_hook},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue