我正在编写一个使用插件的应用程序。有两种类型的插件:Engine
和 Model
。 Engine
对象有一个 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/