Я рассматриваю возможность интеграции некоторого кода C в систему Python (Django), и я рассматривал возможность использования API Python / C. Альтернатива - два отдельных процесса с IPC, но я сначала смотрю на прямое взаимодействие. Я новичок в Python, поэтому я пытаюсь понять, какое направление выбрать.
Возможно ли вызвать функцию инициализатора C для malloc
блока памяти (и поместить в него что-то) и вернуть ему дескриптор обратно в скрипт Python (указатель на начало блока памяти) , Выделенная память должна оставаться в куче после возврата из функции init. Затем скрипт Python может вызывать последующие функции C (передавая в качестве аргумента указатель на начало памяти), и функция может немного подумать и вернуть значение скрипту Python. Наконец, есть еще одна функция C для освобождения памяти.
Предположим, что приложение является однопоточным и что после функции init память считывается только из, поэтому параллелизм не является проблемой. Объем памяти составит несколько сотен мегабайт.
- Это вообще возможно? Позволит ли мне Python
malloc
из кучи и оставит ли он там? Придет ли это из памяти процесса Python? Будет ли Python пытаться выяснить это (т. Е. Выполняет ли он свое собственное выделение памяти и не ожидает ли другие процессы вмешательства в его адресное пространство)?
- Могу ли я просто вернуть байтовый массив в виде управляемой строки Python (или аналогичного типа данных) и передать ссылку обратно в качестве аргумента вызова C? Будет ли Python в порядке с такой большой строкой?
- Было бы лучше сделать это с отдельным процессом и IPC?