如何抑制“从未等待过协程”的警告?

时间:2020-05-27 14:20:00

标签: python python-asyncio

所有有关“从未等待的协程”的搜索结果都是针对那些试图开枪而忘记或者实际上忘记等待的人的。这不是我的情况。

我想像通常使用生成器一样使用协程:我在方便所有变量的情况下在此处创建协程,但是我不确定是否需要运行它。像这样:

options = {
   'a': async_func_1(..., ...),
   'b': async_func_2(),
   'c': async_func_3(...),
}

和其他地方:

appropriate_option = figure_the_option_out(...)
result = await options[appropriate_option]

4 个答案:

答案 0 :(得分:2)

这可能有帮助

double

其中 .0 导致 RuntimeWarning

您可以像上面一样暂时抑制警告。您可以在 https://python.readthedocs.io/en/latest/library/warnings.html#temporarily-suppressing-warnings

上阅读更多详细信息

答案 1 :(得分:-1)

创建协程的成本不高,但是您仍然需要警告来避免许多异步问题:

import asyncio


async def main():
    # many code
    asyncio.sleep(1)  # Oops! I forgot to await, but warning will help me to notice that
    # many code


asyncio.run(main())

与生成器不同,asyncio完全基于以下假设:一旦创建了Corotine对象,您将等待它。

换句话说,处理asyncio时应遵循以下原则:仅在要开始执行协程对象之前创建协程对象。

我认为,@ jdehesa提出的解决方案对您来说是最好的方法。

答案 2 :(得分:-1)

您可以通过在Python中使用-W标志来禁止显示警告。

python -W ignore my_script.py

答案 3 :(得分:-1)

我仍然没有找到可以在初始化时完成的事情,但是我找到了可以在等待所有协程之后完成的解决方案。

for coroutine in options.values():
    coroutine.close()

close()函数将在所有协程中都可用,无论是否等待。