PyPy与asyncio兼容吗?

10

PyPy支持aio和Python 3.5吗?

我需要PyPy的性能和asyncio的异步代码。同时,我需要在我的代码中使用async/await。这是否可能?

如果是,有什么需要注意的细节吗?


不是真正的答案,但也许值得注意的是:Trio 是一个友好的 asyncio 替代品。有一些区别。这里相关的是:Trio 完全支持 pypy(例如,每个更改都在 pypy 上进行了测试)。 - Nathaniel J. Smith
2个回答

26

在撰写本文时,PyPy的当前版本为7.2.0,支持至少在Linux和Windows上使用asyncio。


旧的,现在已经过时(截至2019年10月20日)的注释:

目前有一个兼容Python 3.5的PyPy版本(v7.0),以及一个兼容Python 3.6的beta版本(v7.1.1)。这两个版本都支持Linux上的asyncio(可能也支持macOS,但我没有尝试过),但只有后者支持Windows上的asyncio。


旧的、现在已过时(截至2019年4月16日)的注释:

目前PyPy支持Python 3.5,所以asyncio应该可以正常工作。然而,在Windows上的Python 3.x仍处于测试质量阶段。不幸的是,目前用于重叠IO的扩展模块,这是在Windows上运行asyncio所需要的,尚未实现。


旧的,现在已过时(截至2018年6月10日)的注释:

目前PyPy支持Python 3.5。请注意,PyPy的Python 3支持目前仅为测试版质量。我们正在不断努力改进它。尽管如此,它还不具备生产就绪性。大多数涉及asyncio的代码应该可以正常工作。如果不能,请检查开放的错误报告创建一个新的错误报告或在评论中让我知道。


旧版,现已过时(截至2017年8月18日)的注释:

目前PyPy支持Python 3.3。这意味着您可以在PyPy3.3上安装asyncio。请注意,PyPy的3.3支持目前仅为alpha / beta质量。但我们正在积极努力提高性能并与CPython兼容。

async/await功能是在Python 3.5中添加的。我们开始了一个非常实验性的分支,支持Python 3.5,但它还有很长的路要走。幸运的是,我们有一名GSoC学生正在开发,但仍然可能需要几年时间(取决于我们收到多少捐款和志愿工作)。

编辑1:以前缺少运行asyncio的功能。在此编辑之前不久实现了该功能。答案已相应地进行了编辑。

编辑2:我们刚刚发布了PyPy3.3的alpha版本。我们不建议任何人尝试仅支持Python 3.2的旧PyPy3版本。这就是为什么我重新编写了大部分答案的原因。


旧的,现在已经过时(截至2016-05-30)的注释:

网站上的PyPy3版本非常陈旧,只实现了Python 3.2 - 我们已经有一年半没有发布过版本了。由于Python 3.2缺少yield from功能,因此asyncio无法与该版本一起使用。


现在似乎有PyPy3.5了? - Display Name
嗯,PyPy3.5仍然不完整或不适合生产。但在过去的一年中,我们的重点主要集中在PyPy3.5上,所以我应该更新我的答案。 - Manuel Jacob
PyPy3.5似乎不支持asyncio,直到该模块的本地部分在Python中重新实现。 - user
@user PyPy3的Windows支持(不仅限于asyncio)仍处于测试版。我会在答案中更明确地说明。感谢您指出这一点。 - Manuel Jacob

0

不行。根据PyPy网站,它仅支持Python 3.2.5,而asyncio需要Python 3.4(实际上可以通过pip在3.3上安装,感谢@dirn)。此外,在asyncio Wiki上,它指出asyncio尚未在PyPy上工作(尽管Wiki最后更新于2015年8月)。


asyncio在3.4中被添加到stdlib中,并且可以在3.3上通过pip安装。但这并不影响关于PyPy的答案。 - dirn
1
这个人说得不一样:https://dev59.com/smox5IYBdhLWcg3wzXal - Ale
也许你应该尝试使用pip asyncio进行安装。 - Ale
1
由于最新版本的pypy3 5.5.0,此答案现已不正确。请考虑编辑答案或删除。 - Gary van der Merwe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接