New submission from ixje <brinki...@gmail.com>:

I have a networked process that looks somewhat like this in its most basic form

```
import asyncio

shutting_down = False

async def read_message(reader, timeout=30):
    async def _read(reader: asyncio.StreamReader):
        try:
            d = await reader.readexactly(24)
            # do something with the data
            print("I'm never called")
        except:
            return None

    try:
        return await asyncio.wait_for(_read(reader), timeout)
    except Exception:
        return None


async def my_service():
    reader, writer = await asyncio.open_connection('127.0.0.1', 20333)
    while not shutting_down:
        m = await read_message(reader, timeout=0)
        if m is None:
            continue
        # else process message


if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.create_task(my_service())
    loop.run_forever()
```

read_message() has a default timeout of 30, but I thought setting it to 0 
(instead of None) would be equal to blocking. This bleeds 16GB of memory in ~3 
minutes. A minimal example is provided.

I manually applied the patch of https://bugs.python.org/issue36613 to a self 
compiled build of 3.7.3 
(https://github.com/python/cpython/commit/ef4ec6ed12d6c6200a85068f60483723298b6ff4)
 on Ubuntu 18.04 and that did not solve the problem.

----------
components: asyncio
files: test_leak_minimal.py
messages: 343470
nosy: asvetlov, ixje, yselivanov
priority: normal
severity: normal
status: open
title: wait_for(coro, timeout=0) memleak
type: resource usage
versions: Python 3.7
Added file: https://bugs.python.org/file48356/test_leak_minimal.py

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

Reply via email to