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

时间:2010-01-21 01:29:53

标签: python c function-pointers

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

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

问题在于,这迫使Model.velocity()中的Engine.update()进行昂贵的Python函数调用(并且还重新获取GIL)。我想在API中添加类似Model.get_velocity_c_func()的内容,这样Model实现就会返回指向velocity()方法的C版本的指针(如果可用),从而使{{1}成为可能进行更快速的C函数调用。

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

1 个答案:

答案 0 :(得分:1)

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

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