Improve performance of exception raise
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Fonctionnalité
- Clarté
- Clairement spécifiée
- Activité
- À l'abandon
- Stack technique
- python
- Domaine
- backend, performance
Piste de recherche
The issue identifies _PyErr_SetObject() and _PyErr_SetRaisedException() as the relevant entry points; start by reading their implementations and the linked PR gh-160476. Compare the exception raising benchmarks described in the issue, including the free-threaded cases, and check whether the proposed direct call preserves the existing behavior. The linked PR indicates work is already underway.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Feature or enhancement
At the end of _PyErr_SetObject() the value is a normalized BaseException instance. The function still took a new reference to Py_TYPE(value) and fetched the value's traceback, only for _PyErr_Restore() to set that traceback back on the same object, store the value and drop the type again. Instead we can call _PyErr_SetRaisedException() directly.
Benchmarks
Default build, single thread:
| Benchmark | base | patch |
|---|---|---|
raise E / except E (heap type) |
174 ns | 171 ns: 1.02x faster |
raise E('message') / except E |
210 ns | 205 ns: 1.02x faster |
raise KeyError(1) / except KeyError (static type) |
192 ns | 176 ns: 1.09x faster |
d[1] / except KeyError (raised from C) |
177 ns | 170 ns: 1.04x faster |
f() / except E (raise through a frame) |
290 ns | 284 ns: 1.02x faster |
| Geometric mean | (ref) | 1.04x faster |
The gain is within binary layout noise range, but in the right direction.
Free-threaded build, N threads each running try: raise E / except E: pass with E defined
by the main thread:
| case | 1 thr | 2 thr | 4 thr | 8 thr |
|---|---|---|---|---|
ctl: isinstance(b, A) |
1.00 | 1.00 | 1.00 | 1.00 |
raise E / except E |
1.03-1.04 | 1.12-1.15 | 1.34-1.44 | 1.60-1.70 |
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
Linked PRs
- gh-160476
- Langage dominant
- Python
- Étoiles
- 77.7k
- Forks
- 38.3k
- Merge moyen
- 14 h 29 min
- PR mergées (30 j)
- 699
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de python/cpython
-
topic-socket type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
python/cpython#160561 · 7 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
tests topic-profiling type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
python/cpython#160334 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
extension-modules type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Les mainteneurs répondent en général sous 1 jour
-
Remove unused FVS_* macrosOuverteinterpreter-core type-feature
Difficulté 1/5 Moins d'une heure Accessibilité débutants 78/100
python/cpython#160109 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
extension-modules type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
python/cpython#160001 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de python/cpython
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
sylvainmetayer/homelab#851 ·
Les mainteneurs répondent en général sous 1 jour
-
needs triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Add `ty-pre-commit` hookOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
kubeflow/docs-agent#279 ·
Les mainteneurs répondent en général sous 3 jours
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
Qiskit/qiskit-ibm-runtime#3523 ·
Les mainteneurs répondent en général sous 1 jour