New submission from Sophia Wisdom <[email protected]>:
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 <[email protected]>
<https://bugs.python.org/issue41699>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com