%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 "", line 619, in _exec
File "", line 883, in exec_module
File "", line 241, in _call_with_frames_removed
File "/j/igm/user/kstaley/pub/Jupyter/play/bar.py", line 3, in
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.
To reproduce:
bar.py
with contentsmy_gauge = Gauge('my_gauge', 'my description')
def add(x, y): return x + y
%load_ext autoreload %autoreload 2 from bar import add
---- cell break ----
add(2, 3)
[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 "", line 619, in _exec
File "", line 883, in exec_module
File "", line 241, in _call_with_frames_removed
File "/j/igm/user/kstaley/pub/Jupyter/play/bar.py", line 3, in
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'}
]