Я написал скрипт на Python, который должен передать миллионы элементов программе на C и получить результат много раз за короткий период (переход от 1 до 10 данные о миллионах вершин (целочисленный индекс и 2 координаты с плавающей запятой) быстро 500 раз, и каждый раз, когда скрипт python вызывает программу C, мне нужно сохранять возвращаемые значения в переменных). Я уже реализовал способ чтения и записи текстовых и / или двоичных файлов, но он медленный и неумный (зачем записывать файлы на жесткий диск, если вам не нужно хранить данные после завершения скрипта python?). Я пробовал использовать трубы, но для больших данных мне выдали ошибки ... Итак, к настоящему времени я думаю, что лучший способ - использовать способность ctypes загружать функции в .dll. Поскольку я никогда не создавал dll, я хотел бы знать, как ее настроить (я знаю, что у многих ide есть шаблон для этого, но мой wxdev-c ++ вылетает, когда я пытаюсь его открыть. Сейчас я загружаю код :: Blocks)
Можете ли вы сказать мне, правильное ли решение, которое я начинаю реализовывать, или есть лучшее решение? Две функции, которые мне нужно вызвать в python, - это
void find_vertex(vertex *list, int len, vertex* lower, vertex* highter)
{
int i;
*lower=list[0];
*highter=list[1];
for(i=0;i<len;i++)
{
if ((list[i].x<=lower->x) && (list[i].y<=lower->y))
*lower=list[i];
else
{
if ((list[i].x>=highter->x) && (list[i].y>=highter->y))
*highter=list[i];
}
}
}
и
vertex *square_list_of_vertex(vertex *list,int len,vertex start, float size)
{
int i=0,a=0;
unsigned int *num;
num=(int*)malloc(sizeof(unsigned int)*len);
if (num==NULL)
{
printf("Can't allocate the memory");
return 0;
}
//controlls which points are in the right position and adds their index from the main list in another list
for(i=0;i<len;i++)
{
if ((list[i].x-start.x)<size && (list[i].y-start.y<size))
{
if (list[i].y-start.y>-size/100)
{
num[a]=i;
a++;//len of the list to return
}
}
}
//create the list with the right vertices
vertex *retlist;
retlist=(vertex*)malloc(sizeof(vertex)*(a+1));
if (retlist==NULL)
{
printf("Can't allocate the memory");
return 0;
}
//the first index is used only as an info container
vertex infos;
infos.index=a+1;
retlist[0]=infos;
//set the value for the return pointer
for(i=1;i<=a;i++)
{
retlist[i]=list[num[i-1]];
}
return retlist;
}
EDIT: забыл опубликовать определение типа вершины
typedef struct{
int index;
float x,y;
} vertex;
EDIT2: Я буду распространять код, поэтому я предпочитаю не использовать внешние модули в python и внешние программы на C. Alsa я хочу попытаться сохранить кроссплатформенный код. Скрипт является дополнением к 3D-приложению, поэтому чем меньше он использует внешние "вещи", тем лучше.