Cython:让python创建内存由C ++填充

时间:2015-06-29 08:42:01

标签: python c++ pointers cython

我有一个C ++代码层,它通过UDP接收消息并将此消息解码为C-struct。我想将此消息信息传递到此消息层顶部的应用程序层。应用程序层是用Python编写的,我们使用Cython来桥接Python和C ++。 基本思想是让Python注册到回调函数:

  1. 为C-struct创建存储区域。由于Python将在其应用程序中使用C-struct,因此我们希望使应用程序层负责创建实际内存。当C ++层调用此回调函数时,它应该返回指向C结构的存储区域的指针。
  2. 向Python应用程序发出信号,告知C-struct的存储区域(在函数1中创建)充满了收到的消息的数据。
  3. 我正在努力解决的问题是:

    1. 如何将指针返回到Python创建的C-struct,正确地返回到C ++层?
    2. 接收到指针时,我应该在指针上调用Py_IncRef吗?当向python发信号时,指针上的Py_DecRef现在是否用数据填充?
    3. 非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

为了在c ++和cython之间交换数据,我会安排数据以适应现有的一个概念证据,如Numpy。

请参阅此讨论。 http://scipy-user.10969.n7.nabble.com/Share-memory-between-python-an-C-td11811.html

特别注意这个: http://gael-varoquaux.info/programming/cython-example-of-exposing-c-computed-arrays-in-python-without-data-copies.html?p=157

或者我会完全使用标准化框架在语言之间的共享内存中进行通信(尽管这会浪费一些时间来序列化和反序列化) 在这种情况下,我可能会使用protobuf(谷歌代码)或类似的。 https://pypi.python.org/pypi/protocyt/0.1.5