New submission from Martin Teichmann:

The arguments of a function which was decorated to be a context manager are 
stored inside the context manager, and are thus kept alive.

This is a memory leak.

Example:

    @contextmanager
    def f(a):
        do_something_with(a)
        a = None  # should release the memory
        yield

if this is now called with something big, say

    with f(something_really_huge):
        pass

then this something_really_huge is kept alive during the with statement, even 
though the function explicitly let go of it.

----------
components: Library (Lib)
messages: 293234
nosy: Martin.Teichmann
priority: normal
severity: normal
status: open
title: release arguments of contextmanager
type: resource usage
versions: Python 3.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue30306>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to