强制模块从CPython脚本在PyPy中运行(在部分代码上运行PyPy)?

时间:2013-04-08 11:44:57

标签: python module cpython pypy

有没有办法从CPython脚本导入模块,但是在PyPy中运行它们?

问题在于我有一个使用大量SciPy(和NumPy)的代码,但是部分代码可以使用PyPy进行优化。

以下是我想做的一个随机例子:

sub_run_in_pypy.py模块:

#assuming this can be optimized with PyPy
def function_a(foo):
    return foo**2

main_run_in_cpython.py模块:

import scipy.stats as stats

#assuming this exists:
import import_function_for_pypy
pypy_imported_function = import_function_for_pypy(module_name=sub_run_in_pypy, function_name=function_a)

x = stats.t.rvs(5, loc=0, scale=1, size=1)

print pypy_imported_function(x)

如果不存在,为什么不呢?

编辑:正如Bakuriu推断的那样,我建议它可能是在一个单独的过程中运行的东西。这会增加太多开销吗?

1 个答案:

答案 0 :(得分:0)

由于我在另一个线程之前很久就偶然发现了这个问题,因此简要描述了反向机制here (Can I embed CPython inside PyPy?)

基本思想是在CPython解释器旁边启动PyPy解释器(或反之亦然),并通过进程间通信连接它们。虽然您可能想尝试通过管道或套接字执行此操作,但强烈建议您使用更高级别的库,例如execnet(实际上是used for this purpose)。

如果您采用低级方法,请务必尽早决定是否以及如何处理多线程或多进程执行等架构,无论您是需要异步计算还是主工设置。