<div dir="ltr">Hi,<div><br></div><div>I wrote simple asyncio program (see below) and I'm not sure if I understand behavior correctly.</div><div>I have print_tasks coroutine which prints each task in a loop by using Task.all_tasks function.</div><div>I have also task_launcher coroutine that launches (by loop.create_task()) simple task that waits some and prints "ping".<br>Question is why finished "ping" tasks keep accumulating in Task.all_tasks? After a while there is a lot of:</div><div><div><Task finished coro=<ping() done, defined at test.py:25> result=None></div></div><div><br></div><div>when printing in Task.all_tasks and number of those increases as new ping tasks are launched</div><div><br></div><div>Is there a way to prune finished tasks (I tried forcing gc) or I do something wrong?</div><div><br></div><div>I ran on python 3.4.3.</div><div><br></div><div>Best regards,</div><div>L</div><div><br></div><div><div>import asyncio</div><div><br></div><div>loop = asyncio.get_event_loop()</div><div><br></div><div>@asyncio.coroutine</div><div>def print_tasks(loop):</div><div>        while True:</div><div>                tasks = asyncio.Task.all_tasks(loop)</div><div><br></div><div>                for task in tasks:</div><div>                        print(task)</div><div>                print()</div><div><br></div><div>                yield from asyncio.sleep(1)</div><div><br></div><div>@asyncio.coroutine</div><div>def task_launcher(loop):</div><div>        while True:</div><div>                yield from asyncio.sleep(1)</div><div>                loop.create_task(ping())</div><div><br></div><div>@asyncio.coroutine</div><div>def ping():</div><div>        yield from asyncio.sleep(2)</div><div>        print("ping")</div><div><br></div><div><br></div><div>loop.create_task(print_tasks(loop))</div><div>loop.create_task(task_launcher(loop))</div><div><br></div><div>loop.run_forever()</div></div><div><br></div></div>