mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-105716: Support Background Threads in Subinterpreters Consistently (gh-109921)
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.
This commit is contained in:
parent
a040a32ea2
commit
1dd9dee45d
11 changed files with 258 additions and 46 deletions
|
@ -1605,6 +1605,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},
|
||||
|
@ -1634,8 +1646,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