首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cython + ctypes?

Cython + ctypes?
EN

Stack Overflow用户
提问于 2013-09-13 20:00:38
回答 1查看 2.6K关注 0票数 3

我们目前正在使用Cython绑定到一些网络和DB库。我们也想使用SDL,但是PySDL2使用ctypes进行绑定。Cython是一个完整的解释器,而ctypes只是一个库。但是,Cythonctypes通常被描述为彼此的替代品。因此,我完全不确定它们是否兼容。

那么,问题是:在一个项目中同时使用Cythonctypes是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2013-09-29 03:55:40

以下是这两个工具的工作原理的简要总结:

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

Cython是一种“某种python”到C的翻译器。生成的C代码可以编译,结果是一种特殊类型的共享库(同样是.so.dll ),它具有作为Python C扩展的所有正确函数。Cython非常聪明,根据输入中的类型注释,它知道是发出直接调用C函数的代码(当您使用cdef时),还是通过PyObject_Call C api调用常规python对象。

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

也就是说,如果你最终从严格的内部循环调用SDL,那么你可以直接在代码中包含libsdl声明,以避免从低级C类型转换到python类型的开销,只是为了让ctypes再次将它们转换回来。您可以将其推迟,直到您的应用程序增长了一点,并且您发现了一些性能瓶颈。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18785825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档