所有有关“从未等待的协程”的搜索结果都是针对那些试图开枪而忘记或者实际上忘记等待的人的。这不是我的情况。
我想像通常使用生成器一样使用协程:我在方便所有变量的情况下在此处创建协程,但是我不确定是否需要运行它。像这样:
options = {
'a': async_func_1(..., ...),
'b': async_func_2(),
'c': async_func_3(...),
}
和其他地方:
appropriate_option = figure_the_option_out(...)
result = await options[appropriate_option]
答案 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()
函数将在所有协程中都可用,无论是否等待。