Repository navigation
[subinterpreters] Fix pending calls in subinterpreters #84412
Description
Activity
Currently, _Py_ThreadCanHandlePendingCalls() only returns true if the current thread is the Python "main thread" (_PyRuntime.main_thread).
_PyRuntime.main_thread is initialized by _PyRuntime_Initialize().
The problem is that a subinterpreter can run a separated thread which may not be the "main thread".
As a consequence, a subinterpreter will not run schedulded pending calls, or it will run them later than it could.
I modified COMPUTE_EVAL_BREAKER() of ceval.c in bpo-40010: now if tstate->interp->ceval.pending.calls_to_do is true, tstate->interp->ceval.eval_breaker is only set to 1 if _Py_ThreadCanHandlePendingCalls() is true.
One option would be to allow any thread to run "pending calls".
Another option is to have one "main thread" per interpreter, rather than having a single "main thread" for all interpreters.
I made pending calls per-interpreter in bpo-39984.
In Python 3.7, main_thread variable came from _PyRutimeState.ceval.pending.main_thread. It was moved into _PyRuntimeState by this change:
commit 5be45a6
Author: Eric Snow <ericsnowcurrently@gmail.com>
Date: Fri Mar 8 22:47:07 2019 -0700bpo-33608: Minor cleanup related to pending calls. (gh-12247)--
_Py_ThreadCanHandleSignals() doesn't have to change: it must only return true for the main thread of the main interpreter. Currently, it's implemented as:
static inline int _Py_ThreadCanHandleSignals(PyThreadState *tstate) { return (_Py_IsMainThread() && _Py_IsMainInterpreter(tstate)); }
- addedinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)3.9 (EOL)end of lifeend of life
on Apr 8, 2020 - added and removedinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)
on May 15, 2020 - changed the title
[-]Fix pending calls in subinterpreters[/-][+][subinterpreters] Fix pending calls in subinterpreters[/+]on May 15, 2020 - added and removedinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)
on May 15, 2020 - changed the title
[-]Fix pending calls in subinterpreters[/-][+][subinterpreters] Fix pending calls in subinterpreters[/+]on May 15, 2020 I don't have the bandwidth to work on this issue, so I just close it.
Metadata
Metadata
Assignees
Labels
Projects
- StatusShow more project fieldsDone
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields: