Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Metrics declared at toplevel of program interfere with autoreload

Aperta
#1,042 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
python

Direzione di ricerca

Riprodurre il problema con bar.py, il notebook Jupyter che utilizza IPython autoreload e prometheus_client.Gauge, quindi esaminare il traceback di duplicate CollectorRegistry. Determinare il comportamento previsto per il ricaricamento di una metrica di primo livello; done deve significare che la riesecuzione della cella del notebook dopo la modifica di bar.py viene completata senza l’errore di serie temporali duplicate.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

To reproduce:

  1. Create a file bar.py with contents
from prometheus_client import Gauge

my_gauge = Gauge('my_gauge', 'my description')

def add(x, y):
    return x + y
  1. Create a Jupyter notebook with the contents
%load_ext autoreload
%autoreload 2
from bar import add
# ---- cell break ----
add(2, 3)

and run it.
3. Edit bar.py in some way (e.g. add a product(x, y) function).
4. Re-run the add(2, 3) cell in the notebook

Expected behavior

Autoreload works fine; the cell runs without issue.

Actual behavior

After running add(2, 3) a second time, it prints this error to stderr:

[autoreload of bar failed: Traceback (most recent call last):
  File "/dev/shm/uid-21748-gid-32786/39d5b5d2-seed-nspid4026531836-ns-4026531841/lib/python3.10/site-packages/IPython/extensions/autoreload.py", line 245, in check
    superreload(m, reload, self.old_objects)
  File "/dev/shm/uid-21748-gid-32786/39d5b5d2-seed-nspid4026531836-ns-4026531841/lib/python3.10/site-packages/IPython/extensions/autoreload.py", line 394, in superreload
    module = reload(module)
  File "/dev/shm/uid-21748-gid-32786/39d5b5d2-seed-nspid4026531836-ns-4026531841/lib/python3.10/imp.py", line 315, in reload
    return importlib.reload(module)
  File "/dev/shm/uid-21748-gid-32786/39d5b5d2-seed-nspid4026531836-ns-4026531841/lib/python3.10/importlib/__init__.py", line 169, in reload
    _bootstrap._exec(spec, module)
  File "<frozen importlib._bootstrap>", line 619, in _exec
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/j/igm/user/kstaley/pub/Jupyter/play/bar.py", line 3, in <module>
    my_gauge = Gauge('my_gauge', 'my description')
  File "/dev/shm/uid-21748-gid-32786/39d5b5d2-seed-nspid4026531836-ns-4026531841/lib/python3.10/site-packages/prometheus_client/metrics.py", line 365, in __init__
    super().__init__(
  File "/dev/shm/uid-21748-gid-32786/39d5b5d2-seed-nspid4026531836-ns-4026531841/lib/python3.10/site-packages/prometheus_client/metrics.py", line 143, in __init__
    registry.register(self)
ValueError: Duplicated timeseries in CollectorRegistry: {'my_gauge'}
]

Notes

I think instantiating a metric should be idempotent. If you are passing the exact same metric name, docstring, labels, etc., you should get back the same metric object instance. This would imply having a factory function instead of directly exposing the metric classes. Maybe this behavior could be opt-in if enabling it by default is worrisome.

Lingua principale
Python
Stelle
4.4k
Fork
876
Merge medio
8g 4h
PR unite (30g)
1

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di prometheus/client_python

Tutte le issue di prometheus/client_python

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.