mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-40453: Add PyConfig._isolated_subinterpreter (GH-19820)
An isolated subinterpreter cannot spawn threads, spawn a child process or call os.fork(). * Add private _Py_NewInterpreter(isolated_subinterpreter) function. * Add isolated=True keyword-only parameter to _xxsubinterpreters.create(). * Allow again os.fork() in "non-isolated" subinterpreters.
This commit is contained in:
parent
8bcfd31cc0
commit
252346acd9
14 changed files with 68 additions and 12 deletions
|
@ -1526,7 +1526,7 @@ Py_Finalize(void)
|
|||
*/
|
||||
|
||||
static PyStatus
|
||||
new_interpreter(PyThreadState **tstate_p)
|
||||
new_interpreter(PyThreadState **tstate_p, int isolated_subinterpreter)
|
||||
{
|
||||
PyStatus status;
|
||||
|
||||
|
@ -1573,6 +1573,7 @@ new_interpreter(PyThreadState **tstate_p)
|
|||
if (_PyStatus_EXCEPTION(status)) {
|
||||
goto error;
|
||||
}
|
||||
interp->config._isolated_interpreter = isolated_subinterpreter;
|
||||
|
||||
status = pycore_interp_init(tstate);
|
||||
if (_PyStatus_EXCEPTION(status)) {
|
||||
|
@ -1606,10 +1607,10 @@ error:
|
|||
}
|
||||
|
||||
PyThreadState *
|
||||
Py_NewInterpreter(void)
|
||||
_Py_NewInterpreter(int isolated_subinterpreter)
|
||||
{
|
||||
PyThreadState *tstate = NULL;
|
||||
PyStatus status = new_interpreter(&tstate);
|
||||
PyStatus status = new_interpreter(&tstate, isolated_subinterpreter);
|
||||
if (_PyStatus_EXCEPTION(status)) {
|
||||
Py_ExitStatusException(status);
|
||||
}
|
||||
|
@ -1617,6 +1618,12 @@ Py_NewInterpreter(void)
|
|||
|
||||
}
|
||||
|
||||
PyThreadState *
|
||||
Py_NewInterpreter(void)
|
||||
{
|
||||
return _Py_NewInterpreter(0);
|
||||
}
|
||||
|
||||
/* Delete an interpreter and its last thread. This requires that the
|
||||
given thread state is current, that the thread has no remaining
|
||||
frames, and that it is its interpreter's only remaining thread.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue