Передача данных между C ++ и Python

Я хотел бы разделить память между C ++ и Python.

Моя проблема:

  1. Я работаю с большими наборами данных (до 6 ГБ ОЗУ) в C ++. Все расчеты сделаны на С ++.
  2. Затем я хочу «вставить» все свои результаты в программу Python. Но я могу только записать свои данные на диск, а затем прочитать этот файл из Python, что неэффективно.

Есть ли способ «отобразить» память, соответствующую переменным C ++, чтобы я мог получить доступ к данным из Python? Я не хочу копировать 6 ГБ данных на жесткий диск.

4

Решение

Первый путь: Я думаю, что более подходящий путь для вас ctypes. Вы можете создать общую библиотеку, а затем загрузить функции общей библиотеки в Python и заполнить все контейнеры данных, которые вы хотите в Python.

В Windows вы можете создать DLL, а в Linux — общую библиотеку .so.

Теперь это имеет преимущество в том, что это не зависит от вашей версии Python.

Второй путьЯ думаю, что это менее уместно, но вы можете заставить его работать, а это Расширение Python C. При этом вы можете вызывать контейнеры данных Python (PyObjects) и заполните их внутри C.

Однако код, который вы здесь компилируете, всегда должен быть связан с библиотеками Python.

Какой использовать?:

  • Используйте ctypes, если у вас есть некоторые функции, которые вы хотите вызвать в C / C ++, а затем выполните остальную часть работы в Python.
  • Используйте расширение Python C, если у вас есть некоторые функции, которые вы хотите вызвать в Python, и вы хотите сделать все остальное в C / C ++.

Используя оба варианта, вы можете передавать огромные блоки памяти между C ++ и Python без необходимости каких-либо операций чтения / записи на диске.

Надеюсь это поможет.

3

Другие решения

Других решений пока нет …