Python указатели массива в подпроцесс c ++ - PullRequest
1 голос
/ 27 февраля 2020

У меня есть код C ++, который я хотел бы запустить в коде python. Numpy массивы создаются в этом python сценарии, а затем отправляются в dll через ctypes.

TheDLL. cpp

    extern "C" __declspec(dllexport) void DoSomeStuff(int *Array_A, int *Array_B, int *Array_C) { 

        //Do stuff here

}

TheSimulation.py

mydll = ctypes.CDLL("TheDLL.dll")
mydll.DoSomeStuff.argtypes = [ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int)]

Array_A = NumpyArrayA.ctypes.data_as(ctypes.POINTER(ctypes.c_int))
Array_B = NumpyArrayB.ctypes.data_as(ctypes.POINTER(ctypes.c_int))
Array_C = NumpyArrayC.ctypes.data_as(ctypes.POINTER(ctypes.c_int))

mydll.DoSomeStuff(Array_A, Array_B, Array_C)

Array_A, Array_B и Array_C имеют измененные значения, и сценарий python продолжается

Вышеприведенное делает именно то, что мне нужно, однако я заметил, что DoSomeStuff работает очень медленно в отличие от того, если он был скомпилирован как Exe и работает сам по себе (примерно в 15 раз медленнее). Я попытался скомпилировать cpp в обычный EXE-файл и вызвать его через subprocess в python.

TheEXE. cpp

void DoSomeStuff(int *Array_A, int *Array_B, int *Array_C) {
//Do stuff here
}

    int main () {

    //Load Array_A, Array_B, Array_C from external files, separate from the python script entirely

    DoSomeStuff(Array_A, Array_B, Array_C);
    }

И python сейчас

TheSimulation.py

from subprocess import call
call(["TheEXE.exe"])

С точки зрения скорости метод subprocess дает желаемые результаты, но я не уверен, как я могу вставить эти указатели массива в TheEXE. exe-процесс так же, как я делал с этими ctypes указателями массива в DLL. Можно ли как-то повторить то, что я сделал с ctypes и DLL через subprocess и EXE?

Заранее всем спасибо и наилучшими пожеланиями,

...