mirror of
https://github.com/python/cpython.git
synced 2025-08-10 03:49:18 +00:00
[3.12] gh-105716: Support Background Threads in Subinterpreters Consistently (gh-109921) (gh-110707)
The existence of background threads running on a subinterpreter was preventing interpreters from getting properly destroyed, as well as impacting the ability to run the interpreter again. It also affected how we wait for non-daemon threads to finish.
We add PyInterpreterState.threads.main, with some internal C-API functions.
(cherry-picked from commit 1dd9dee45d
)
This commit is contained in:
parent
82ae5a609d
commit
0122b4d7c9
11 changed files with 386 additions and 151 deletions
|
@ -1604,6 +1604,18 @@ PyDoc_STRVAR(excepthook_doc,
|
|||
\n\
|
||||
Handle uncaught Thread.run() exception.");
|
||||
|
||||
static PyObject *
|
||||
thread__is_main_interpreter(PyObject *module, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
PyInterpreterState *interp = _PyInterpreterState_GET();
|
||||
return PyBool_FromLong(_Py_IsMainInterpreter(interp));
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(thread__is_main_interpreter_doc,
|
||||
"_is_main_interpreter()\n\
|
||||
\n\
|
||||
Return True if the current interpreter is the main Python interpreter.");
|
||||
|
||||
static PyMethodDef thread_methods[] = {
|
||||
{"start_new_thread", (PyCFunction)thread_PyThread_start_new_thread,
|
||||
METH_VARARGS, start_new_doc},
|
||||
|
@ -1633,8 +1645,10 @@ static PyMethodDef thread_methods[] = {
|
|||
METH_VARARGS, stack_size_doc},
|
||||
{"_set_sentinel", thread__set_sentinel,
|
||||
METH_NOARGS, _set_sentinel_doc},
|
||||
{"_excepthook", thread_excepthook,
|
||||
{"_excepthook", thread_excepthook,
|
||||
METH_O, excepthook_doc},
|
||||
{"_is_main_interpreter", thread__is_main_interpreter,
|
||||
METH_NOARGS, thread__is_main_interpreter_doc},
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue