New submission from Sophia Wisdom <sophia@reduct.video>:
The below example leaks ~20 megabytes of memory. The amount leaked is related to both the number of items in the list and the number of times `run_in_executor` is called. ``` import asyncio def leaker(): x = list(range(int(1000))) 1/0 async def function(): loop = asyncio.get_running_loop() for i in range(10000): loop.run_in_executor(None, leaker) ``` at this point, `ps -o rss -p {pid}` outputs about 10MB after invoking this: ``` asyncio.run(function()) ``` Memory jumps to about 94MB, and doesn't return. The lists don't show up in `gc.get_objects()`, but the amount of memory leaked does increase (though not proportionately) when the lists increase in size. Note - this doesn't happen if `run_in_executor` is `await`ed immediately, but it does still occur if we e.g. put the future in a dictionary and then `await` the results later. The leak still occurs on my machine if the `1/0` is omitted, but not on a colleague's. We're pretty confused as to why this happens, and would appreciate any help. ---------- components: asyncio messages: 376275 nosy: asvetlov, sophia2, yselivanov priority: normal severity: normal status: open title: Potential memory leak with asyncio and run_in_executor versions: Python 3.10, Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue41699> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com