什么是“执行<handle <taskwakeupmethwrapper ...”=“”warning =“”in =“”“python =”“asyncio =”“mean =”“

时间:2017-11-24 15:37:39

标签: python future python-asyncio

= “”

在设置asyncio future的结果时,正在打印以下消息。

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

我不知道哪里开始寻找原因。但是,如果我关闭asyncio调试模式,它会崩溃并向我显示。

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]>

2 个答案:

答案 0 :(得分:4)

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

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

正如您所指出的,只有在打开调试模式时,asyncio才会跟踪此问题。

Task was destroyed but it is pending!

无论调试模式如何,您都会收到此警告,这意味着在您拨打loop.close()时,您仍然有正在运行的任务。它再次不正常(阅读here以了解原因)。

如果没有可重复的代码段,很难说更多。

如果你在WeakValueDictionary中存储任务,那可能会有问题,是的。在关闭事件循环之前,您应该properly cancel所有任务(或等待它们完成)。

答案 1 :(得分:1)

在Python的最新版本*中,您将获得有关哪个任务将事件循环保持太长时间的更多信息。有关此功能的更多信息,请参见:https://bugs.python.org/issue38986

* Python 3.7.6或Python 3.8.1