【发布时间】:2019-01-03 13:13:44
【问题描述】:
通常要编写兼容 python 2/3 的代码,您需要遵循两种解释器都可以理解的特定风格,例如:https://python-future.org/compatible_idioms.html。
但是,由于 asyncio 引入了 async def 和 await function() 等语法,如果在 Python 2 下运行会导致解析错误。
如何编写一个与 python 2 和 python 3 兼容的库,并且仍然可以提供 asyncio 接口?如果没有简单的方法可以做到这一点,是否可以在库中制作某个只能在 python 3.5+ 中导入的异步子模块?
【问题讨论】:
-
您是否有任何特定的理由来支持旧版 Python(生命周期结束后不到一年 pythonclock.org)。我可能不会使用 Python 2 和 Python
-
如果您确实想支持旧版本,则必须避免使用 async/await 并使用 threading/eventlet 或使用 generators/yield 语句实现异步协程。
-
不是针对新库,是针对支持2&3的现有库。但无论如何,对于想要支持任何版本的 Python 3 的库来说,问题仍然存在。
-
不推荐使用异步生成器吗?它们在 Python 3 的未来版本中仍然有效吗?如果是这样,您介意写一个答案吗,因为这可能是我的解决方案
-
异步生成器仅在 Python 3.6 及更高版本中可用,并且绝对不会被弃用。普通生成器在 Python 2 和 3 中都可用,并且也没有被弃用。不推荐使用生成器来实现协程,即
@asyncio.coroutine装饰器。但即使是那种生成器也严重依赖于yield from关键字和asyncio框架,而这两者在 Python 2 中都没有。
标签: python python-3.x asynchronous python-asyncio