9

基本上我想用 C 编写一个 Python 程序调用函数。

所以(据我所知)我的选择是:

  • CTypes/ CFFI
    • 创建一个包含 C 函数的 DLL/SO/DyLib 并使用 CTypes 或CFFI访问它们。显然CFFI速度更快,唯一的缺点是必须在 python 中声明所有函数签名。
    • 优点:
      • 不必对我的 C 函数进行任何调整。所有类型转换都是在 Python 中完成的。
    • 缺点:
      • 表现 ?
  • Python 二进制模块
    • 用C写一个python接口,把我的C模块转换成二进制python模块
    • 优点:
      • 表现 ?
    • 缺点:
      • 所有类型转换都是在 C 中完成的。使用 [SIP][3] 这可能是自动化的。

将 C 模块转换为 python 二进制模块真的更快吗?

两种解决方案都支持向 C 函数发送 python 回调吗?

SIP 是生成 python 接口的好选择吗?还有其他选择吗?

他们中的任何一个还有其他特殊性吗?

4

1 回答 1

1

我只是在查看我发布的与此相关的旧选项列表:http: //stromberg.dnsalias.org/~strombrg/speeding-python/

如果您只针对 CPython(2.x 或 3.x),我可能会选择 Cython。

如果你也想在 Pypy 上运行,CFFI 可能会很好;我还没有尝试过,但听起来很棒。虽然它并不完全像 ctypes - ctypes 更多 ABI 级别,而 CFFI 更多 API 级别 - 这很好。

如果您也希望能够在 Jython 上运行,那么 subprocess 可能是您最好的选择。

于 2013-07-19T21:32:19.827 回答