Cython + ctypes?



我们目前正在使用 Cython 与一些网络和数据库库进行绑定。我们也想使用 SDL ,但PySDL2使用 ctypes 进行绑定。虽然Cython是完整的解释器,但ctypes只是图书馆。但是,Cythonctypes最常被描绘成彼此的替代品。因此,我完全不确定它们是否兼容。

那么,问题:是否可以在一个项目中同时使用Cythonctypes

以下是这两个工具如何工作的简要摘要:

ctypes 是一个非常 pythonic 的包装器,它位于一个名为 cffi 的库上,它能够加载共享库(.so.dll文件)并调用它们,而无需首先编译任何代码来包装这些库中定义的函数。 你必须告诉 ctypes 它将调用的函数,以便它可以从 python 类型(intstr 等)转换为共享库中表示的 abi(uint32_tchar * 等)。

Cython是C翻译的"一种python"。 生成的C代码可以被编译,结果是一种特殊的共享库(.so或再次.dll),它具有成为Python C扩展的所有正确功能。 Cython 非常聪明,根据输入中的类型标注,它知道是发出直接调用 C 函数的代码(当你使用 cdef 时),还是通过 PyObject_Call C API 的方式调用常规的 python 对象。

由于您可以(或多或少)在 Cython 源代码中自由混合 C 和 python,因此在 Cython 库中使用 PySDL2 应该没有困难,只需像调用常规 python 一样调用它,导入它,调用它,一切都应该"正常工作"。

也就是说,如果您最终从紧密的内部循环调用 SDL,则可以直接在代码中包含libsdl声明中受益,以避免从低级 C 类型转换为 python 类型的开销,只是为了让ctypes将它们重新转换回来。 您可能会推迟它,直到您的应用程序增长一点并且您注意到一些性能瓶颈。

相关内容

  • 没有找到相关文章

最新更新