python asyncio中的“正在执行<Handle <TaskWakeupMethWrapper ...”警告是什么意思

Aar*_*ndt 6 python future python-asyncio

设置异步将来的结果时,下面的消息正在打印。

Executing <Handle <TaskWakeupMethWrapper object at 0x7fc3435141f8>(<Future finis...ection.py:260>) created at /media/stuff/stuff/projects/dare/dcds/dcds/common/connection.py:221> took 1.723 seconds
Run Code Online (Sandbox Code Playgroud)

我什至不知道从哪里开始寻找原因。但是,如果我关闭了异步调试模式,它将崩溃并向我显示。

Task was destroyed but it is pending!
task: <Task pending coro=<upload.<locals>.upload_coro() done, defined at /media/stuff/stuff/projects/dare/dcds/dcds/__main__.py:58> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7fdf5df01d38>()]> cb=[_chain_future.<locals>._call_set_state() at /home/elviento/anaconda3/lib/python3.6/asyncio/futures.py:414]>
Run Code Online (Sandbox Code Playgroud)

Mik*_*mov 5

Executing <Handle <TaskWakeupMethWrapper object at 0x7fc3435141f8>(<Future finis...ection.py:260>) created at /media/stuff/stuff/projects/dare/dcds/dcds/common/connection.py:221> took 1.723 seconds
Run Code Online (Sandbox Code Playgroud)

该警告的主要部分是took 1.723 seconds:警告说某些协程(或任务)使事件循环冻结了1.7秒,这是正常情况(如果您不明白为什么,请在此处阅读答案或者此处更好)。

如您所述,asyncio仅在调试模式打开时跟踪此问题。

Task was destroyed but it is pending!
Run Code Online (Sandbox Code Playgroud)

无论调试模式如何,都会收到此警告,这意味着在您致电时,loop.close()您仍在运行任务。这又不是正常情况(请阅读此处了解原因)。


没有可复制的代码片段,很难说更多。

如果将任务存储在WeakValueDictionary中,可能会出现问题,是的。在关闭事件循环之前,应正确取消所有任务(或等待它们完成)。