我已经用 Python 编写了一个高级电机控制器,并且已经到了想要降低一些级别以获得一些速度的地步,所以我对用 C 编写这些位感兴趣。
我对 C 语言没有太多经验,但我正在研究的数学非常简单,所以我确信我可以用最少的头撞墙来实现。我不确定如何最好地调用这个编译的 C 程序,以便将它的输出通过管道传输回我的高级 python 控制器。
我使用了一些 ctypes,但只是从制造商提供的 DLL 中提取一些函数……不确定在这种情况下这是否是一条合适的路径。
有什么想法吗?
您可以在此处查看本教程。
此外,官方 python 网站上的一个更可靠的示例,here。
例如,
sum.h
功能
int sum(int a, int b)
一个名为 , 的module.c
文件
#include <Python.h>
#include "sum.h"
static PyObject* mod_sum(PyObject *self, PyObject *args)
{
int a;
int b;
int s;
if (!PyArg_ParseTuple(args,"ii",&a,&b))
return NULL;
s = sum(a,b);
return Py_BuildValue("i",s);
}
static PyMethodDef ModMethods[] = {
{"sum", mod_sum, METH_VARARGS, "Description.."},
{NULL,NULL,0,NULL}
};
PyMODINIT_FUNC initmod(void)
{
PyObject *m;
m = Py_InitModule("module",ModMethods);
if (m == NULL)
return;
}
Python
import module
s = module.sum(3,5)
另一种选择:尝试numba。它免费为您提供类似 C 的速度:只需导入 numba 和 @autojit 您的函数,即可获得惊人的速度提升。
如果您有复杂的数据类型将无法工作,但如果您正在循环和跳转数组索引,它可能正是您正在寻找的。
你可以使用 SWIG,使用起来非常简单
您可以使用 Cython 设置必要的 c 类型并编译您的 python 语法代码。