[New-bugs-announce] [issue39782] local varible referenced a Exception won't be collected in function

Wang Jie report at bugs.python.org
Fri Feb 28 06:18:30 EST 2020


New submission from Wang Jie <i at i8e.net>:

I referenced an Exception object in a function and found memory usage will increase constantly in the accident. I think it may be a bug.

I wrote a minimal code to reproduce it.

```py
from threading import local, Thread
from time import sleep

l = {}

def t0():
  b = l.get('e') # memory usage won't increase if I remove this line
  try:
    raise Exception('1')
  except Exception as e:
    l['e'] = e

def target():
  while True:
    sleep(0.0001)
    t0()

target()

# t = Thread(target=target)
# t.daemon = True
# t.start()
```

I tried to execute it in IPython and got the following output:

```
In [1]: run py/ref_exception_causes_oom.py

In [2]: import objgraph

In [3]: objgraph.show_growth(limit=3)
frame        78792    +78792
Exception    78779    +78779
traceback    78779    +78779

In [4]: objgraph.show_growth(limit=3)
Exception   100862    +22083
traceback   100862    +22083
frame       100875    +22083

In [5]: objgraph.show_growth(limit=3)
Exception   115963    +15101
traceback   115963    +15101
frame       115976    +15101
```

And I tried to execute this code in python2.7 and pypy. Both of them won't occur this problem.

----------
components: Interpreter Core
messages: 362873
nosy: wangjie
priority: normal
severity: normal
status: open
title: local varible referenced a Exception won't be collected in function
type: resource usage
versions: Python 3.7

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue39782>
_______________________________________


More information about the New-bugs-announce mailing list