Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Closed
Description
Bug report
Bug description:
Sending a generator.close() in Python 3.12 does not release resources used by local variables as it used to do in earlier versions of Python. Wrapping the generator content in atry: ... except GeneratorExit: pass releases the resources as expected.
The following shows the difference in space usage between wrapping the code withtry-except and not.
defgenerator_using_a_lot_of_space():a_big_set=set(range(10_000_000))yield42g=generator_using_a_lot_of_space()input('A <press enter>')# 13.4 MBprint(next(g))input('B <press enter>')# 576.6 MBg.close()input('C <press enter>')# 576.6 MB <== space usage used to drop to 13-14 MBdefgenerator_using_a_lot_of_space():a_big_set=set(range(10_000_000))try:yield42exceptGeneratorExit:passg=generator_using_a_lot_of_space()input('D <press enter>')# 14.6 MBprint(next(g))input('E <press enter>')# 575.6 MBg.close()input('F <press enter>')# 14.6 MB <== drop in space usage as expected
The above space measurements were done with
Python 3.12.3 (tags/v3.12.3:f6650f9, Apr 9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)] on win32
and looking at the space usage reported by the Windows 11 Task Manager.
CPython versions tested on:
3.12
Operating systems tested on:
Windows