我想用matplotlib绘制CPU密集型函数。我想使用pypy但它与matplotlib不兼容。绘图本身不是CPU密集型的,不需要加速。我想知道是否有办法从C-python调用pypy函数。我可以(ab)使用多处理模块并从C-python中说出set_executable("/.../pypy")
吗?
答案 0 :(得分:3)
您可以将计算的输出写入stdout并将其传递给另一个程序,该程序读取要从stdin绘制的数据,如下所示:
pypy compute.py | python plot.py
作为中间格式,您可以使用类似JSON的格式,这些格式在pypy和cpython的标准库中都可用,并且可以轻松地从和转换为python原语。
或者,compute.py只能使用子进程模块在CPython中启动plot.py,而不是依赖于shell安排的管道。
或者,您可以使用pickle来保存有关python对象的更多信息,但要小心,因为pickle不是一个标准化的格式。
如果您使用的是最新版本的CPython和Pypy,您可以尝试的另一种方法是multiprocessing.connection模块的Listener和Client类。请注意,在一些旧版本的Python和Pypy(multiprocessing Listeners and Clients between python and pypy)中,交叉python实现Listener和Client已被破坏。 multiprocessing.manager模块可能也适用于不同的cpython和pypy。
答案 1 :(得分:0)
如果您拥有CPU密集型功能,最好的选择是:
A)看看numpy是否有帮助,
B)看看是否可以在python中优化函数,
C)考虑为你的函数编写C扩展名。
D)考虑在pypy中嵌入cpython和matplotlib,如here所示。
答案 2 :(得分:0)