2

我已经用 Python 编写了一个高级电机控制器,并且已经到了想要降低一些级别以获得一些速度的地步,所以我对用 C 编写这些位感兴趣。

我对 C 语言没有太多经验,但我正在研究的数学非常简单,所以我确信我可以用最少的头撞墙来实现。我不确定如何最好地调用这个编译的 C 程序,以便将它的输出通过管道传输回我的高级 python 控制器。

我使用了一些 ctypes,但只是从制造商提供的 DLL 中提取一些函数……不确定在这种情况下这是否是一条合适的路径。

有什么想法吗?

4

4 回答 4

2

您可以在此处查看本教程。

此外,官方 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)
于 2013-04-16T03:11:07.860 回答
0

另一种选择:尝试numba。它免费为您提供类似 C 的速度:只需导入 numba 和 @autojit 您的函数,即可获得惊人的速度提升。

如果您有复杂的数据类型将无法工作,但如果您正在循环和跳转数组索引,它可能正是您正在寻找的。

于 2013-04-16T03:42:03.497 回答
0

你可以使用 SWIG,使用起来非常简单

于 2013-04-16T03:43:10.550 回答
0

您可以使用 Cython 设置必要的 c 类型并编译您的 python 语法代码。

于 2013-05-08T23:33:03.590 回答