【发布时间】:2011-06-25 01:54:30
【问题描述】:
我有一个 Python 脚本和一个 C 程序,我需要从调用 C 程序多次的 Python 脚本传递大量数据。现在,我让用户在使用 ASCII 文件或二进制文件传递它们之间进行选择,但两者都很慢且无用(我的意思是,如果您想存储数据,文件很有用,但我在末尾删除了这些文件脚本)。
os.system 不起作用,参数太多了,因为 C 程序也使用文件将数据返回给 Python,但这是数据少得多。
我想知道我可以用什么来加快这种交流。将文件写入 RAM 磁盘?如果是这样,我该怎么做?
我听说可以使用 ctypes 从 DLL 调用函数,但不知道如何将我的程序编译为 DLL(我在 Windows 7 64 上使用 wxdevc+)。 或者包装一下,但还是不知道能不能用,有没有效率。
数据是 3D 网格的顶点。
我在另一个程序(blender(开源)中运行 Python 脚本,并被多次调用(通常超过 500 次),因为它在一个循环内。脚本发送顶点信息(1 int index 和 3 个浮点坐标)给程序,程序应该返回很多顶点(只有 int 索引,因为我可以用 Python 找到对应的顶点)。
所以这不是交互式的,它更像是一个函数(但它是用 C 编写的)。我正在编写的脚本 + C 程序(即 blender 的附加组件)应该是跨平台的,因为它将被重新分发。
该程序实际上是用 C 编写的,从 Python 中我可以知道包含顶点数据的结构在内存中的地址。如果我知道该怎么做,最好只将一个地址传递给 C 程序,然后从那里找到所有其他顶点(存储在列表中)。
但据我所知,我无法访问另一个程序的内存空间,也不知道是用管道调用程序还是初始化新线程或在脚本内部运行(即实际上在 Blender 线程下运行)
Here is the source 和 blender/source/blender/makesdna/DNA_meshdata_types.h 应该是结构体定义
【问题讨论】:
标签: python c dll parameter-passing