【发布时间】:2019-04-09 10:12:12
【问题描述】:
我以非常基本的方式将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 docs,我们可以阅读:
应用程序开发人员通常应该使用高级异步函数,例如asyncio.run(),并且很少需要引用循环对象或调用其方法。本部分主要面向需要更好地控制事件循环行为的低级代码、库和框架的作者。
我发现它更加简洁易用,但它仅适用于 Python 3.7+。所以在这里我必须做出选择,是使用 Python 3.7+ 和run(),还是让它与 Python 3.6 兼容并使用事件循环。你将如何管理这个?有没有一种简单的方法可以使其向后兼容 Python 3.6?在 Python 3.7 成为通用版本之前,我是否应该先检查 Python 版本并基于此使用一种或另一种方式?
【问题讨论】:
-
如果您要编写适用于两个版本的更复杂的代码,和适用于较新版本的更简单的代码,然后您将切换动态地在它们之间进行...不是更容易坚持使用同时适用于两者的更复杂的吗?
-
@deceze 是的,也许这是最好的选择,我想对此发表意见,并且在使其兼容的情况下,知道哪种方法是最好的方法
-
@deceze 在较旧的 Python 版本上模拟
asyncio.run并不难,而且您可以获得在asyncio.run设置的条件下测试代码的优势,即在新创建的事件循环上。
标签: python python-asyncio