asyncio

Ian Kelly ian.g.kelly at gmail.com
Fri Mar 27 10:15:54 EDT 2015


On Fri, Mar 27, 2015 at 6:38 AM, Marko Rauhamaa <marko at pacujo.net> wrote:
> I don't know the answer to your question. A superficial glance at the
> relevant asyncio source code (and documentation) suggests you shouldn't
> be seeing what you are seeing.
>
> Tasks are kept in a weak set. Tasks should evaporate as soon as nobody
> references them.

Actually I think this explains it. In the OP's while loop, he updates
his task list with the line:

tasks = asyncio.Task.all_tasks(loop)

This creates a strong reference to each of the returned tasks.  When
the loop comes back around, it calls all_tasks again, creating a
second strong reference to each task, then assigns the resulting set
to tasks, allowing the original set to be collected. At no point in
the loop is there ever not a strong reference to each task. So if
asyncio is relying on GC to prune its task set, they will never be
cleaned up.

To the OP: try deleting the tasks variable after you print it out. I
bet this will solve your problem.



More information about the Python-list mailing list