首先,我为使用类似于asyncio
子集的专有库发布代码而道歉。无论如何,这个问题与该库无关,我相信每个熟悉异步Python的人都可以阅读它。
我有一个标准协程,例如:
async def tcoro():
pass
用作超时处理程序。为此目的,它被包装到Task
对象中。基本上Task
通过重复send
次调用来保持协程的活跃性。计划在操作超时时运行任务:
timer = loop.call_later(Task(tcoro()).run, delay=timeout)
但是当操作成功时,挂起的超时将被取消:
timer.cancel()
只是设置了取消标志。稍后,当delay
结束时,事件循环会将timer
对象弹出队列,因为它在此期间被取消,它将被忽略。这产生了:
RuntimeWarning: coroutine 'tcoro' was never awaited
我的问题是,当程序的功能没有问题时,我该如何应对此警告?
我应该忽略它吗?我应该以某种方式压制它吗?我应该重写代码,因为它的设计很糟糕吗?
修复非常简单:
def timeout():
Task(tcoro()).run()
timer = loop.call_later(timeout, delay=timeout)
但我不确定原始代码是否已损坏。