【问题标题】:Can I embed CPython inside PyPy?我可以在 PyPy 中嵌入 CPython 吗?
【发布时间】:2011-10-19 16:47:11
【问题描述】:

我想用 Python 编写一个对性能敏感的应用程序,因此在 PyPy 下执行它是一个自然的选择。但是,我的代码中有很大一部分依赖于 numpy、scipy 和 scikit-learn。是否可以在运行的 PyPy 程序中嵌入 CPython 实例以调用面向数组的代码?如果没有,让 PyPy 和 CPython 相互交流的最简单方法是什么?

【问题讨论】:

  • 顺便说一句:您可能对 pypy-dev 列表中当前处于活动状态的“关于 pypy+numpy 项目的问题”线程感兴趣,它涉及在(当前版本的) PyPy,我认为有人建议了一种解决方法来让它工作(也使用 CPython,但在单独的进程中)。

标签: python numpy cython cpython pypy


【解决方案1】:

目前最好的选择是Cython,而不是 PyPy。如果您添加类型声明,它具有 c 级性能,并且与 numpy 等完美集成。

人们目前正在努力让它与 PyPy 一起很好地工作,但这还有很长的路要走。

【讨论】:

  • 请注意:它只有 C 级性能如果您编写 C,仅在现有 Python 代码上运行它并没有什么好处。这意味着对您的代码、您使用的类型和 API、精心放置的类型注释以及可能的一些手动内存管理的限制。当然,Cython 仍然是一个非常好的选择,尤其是在 NumPy 集成方面。它只是不是所有 Pythonity 的救星。
  • 是的,我应该提到,与 PyPy 不同,从 Python 到 Cython 的惰性代码转储不会给您任何帮助。但是,您不需要“编写 C”。您使用类型声明编写 Cython,并且可能更多地关注内存管理。我发现只需在普通的旧 Python 代码中使用类型声明就可以非常容易地获得巨大的加速。它仍然感觉像 Python。
【解决方案2】:

不,您不能在 PyPy AFAIK 中嵌入 CPython。但是,您可以使用分布式/并行执行系统使 PyPy 与 CPython 对话。 execnetPyro 都提到了这个精确的 PyPy <-> CPython 用例。 Python Wiki 的 Parallel Processing 页面中的其他包可能也适合。

此外,正如 delnan 所提到的,implementing Numpy in PyPy 上有关于 PyPy 开发人员计划的 a current discussion(目前还不包括对 scipy 和 scikit.learn 的支持)。

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    相关资源
    最近更新 更多