python - 在两个Python模块之间传递C函数指针

标签 python c function-pointers

我正在编写一个使用插件的应用程序。有两种类型的插件:EngineModelEngine 对象有一个 update() 方法,该方法调用 Model.velocity() 方法。

出于性能原因,这些方法允许用 C 编写。这意味着有时它们会用 Python 编写,有时会用 C 编写。

问题在于,这会强制在 Engine.update() 中对 Model.velocity() 进行昂贵的 Python 函数调用(并且还重新获取 GIL)。我考虑过向 API 添加类似 Model.get_velocity_c_func() 的内容,这将允许 Model 实现返回指向其 velocity() 的 C 版本的指针 方法(如果可用),使 Engine 能够执行更快的 C 函数调用。

我应该使用什么数据类型来传递函数指针?这是一个好的设计吗?也许有更简单的方法?

最佳答案

CObject (PyCOBject) 数据类型就是为此目的而存在的。它包含一个 void*,但您可以存储任何您想要的数据。您必须小心,不要将错误的 CObject 传递给错误的函数,因为某些其他库的 CObject 看起来就像您自己的一样。

如果您想要更多的类型安全性,您可以轻松地为此推出自己的 PyType;毕竟,它所要做的就是包含一个正确类型的指针。

关于python - 在两个Python模块之间传递C函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2106324/

相关文章:

c - 在 MacOS El Captain 上使用 gcc 编译时未找到库

c++ - 动态创建一个函数指针来调用给定实例上的方法

c++ - 为什么我们在 C++ 中使用 std::function 而不是原来的 C 函数指针?

c - 如何计算函数中的行数

python - 使用 python 3.5 和 urllib 禁用 SSL 身份验证

python - 如何使用django框架返回分页?

python - 为什么已经导入了整个包,还要在 Python 中导入特定的子包?

c - 加载原始二进制文件

c++ - 使用模板对象操作

python - 将文件逐行读取到 Python 中的数组元素中