我正在以一种非常基础的方式使用asyncio
应用程序。查看互联网上的大多数教程(甚至官方文档),我发现它们使用get_event_loop()
和loop.run_until_complete()
:
import asyncio
async def say(what, when):
await asyncio.sleep(when)
print(what)
loop = asyncio.get_event_loop()
loop.run_until_complete(say('hello world', 1))
loop.close()
但是在Python 3.7文档中,我们可以读到:
应用程序开发者通常应使用高级asyncio函数,例如asyncio.run(), 很少需要引用循环对象或调用其方法。此部分主要面向较低级别代码、库和框架的作者,他们需要更精细地控制事件循环行为。
我发现这种方法更加简洁易用,但它仅适用于Python 3.7以上版本。因此,我必须做出选择,是使用Python 3.7+和
run()
还是使其与Python 3.6兼容并使用事件循环。你会如何处理这个问题?有没有简单的方法使它向后兼容Python 3.6?我应该先检查Python版本,然后根据版本使用其中一种方式,直到Python 3.7成为常见版本?
asyncio.run
并不难,而且你可以获得一个优势,即在由asyncio.run
设置的条件下测试你的代码,也就是在一个新创建的事件循环中。 - user4815162342