我应该怎么做“未等待的协程”警告?

时间:2017-09-15 16:34:54

标签: python-3.x coroutine

首先,我为使用类似于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)

但我不确定原始代码是否已损坏。

0 个答案:

没有答案