У меня есть сценарий Python и программа на C, и мне нужно передать большие объемы данных из сценария Python, которые многократно вызывают программу на C. Прямо сейчас я позволяю пользователю выбирать между передачей их с помощью файла ASCII или двоичного файла, но оба они довольно медленные и бесполезные (я имею в виду файлы, которые полезны, если вы хотите сохранить данные, но я удаляю эти файлы в конце скрипт).
os.system
не работает, аргументов слишком много, поскольку программа на C тоже использует файлы для возврата данных в Python, но это намного меньше данных.
Интересно, что я могу использовать для быстрого обмена? Запись файлов на RAM-диск? Если так, как я могу это сделать?
Я слышал, что можно вызывать функции из DLL с использованием ctypes, но я не знаю, как скомпилировать мою программу как DLL (я использую wxdevc + в Windows 7 64).
Или оберните его, но все еще не знаете, может ли оно работать и эффективно ли оно.
Данные являются вершинами трехмерной сетки.
Я запускаю скрипт Python внутри другой программы ( blender (с открытым исходным кодом) и вызывается много раз (обычно более 500 раз), потому что он находится внутри цикла. Скрипт отправляет информацию о вершинах ( 1 int
index и 3 плавающих координаты) в программу, и программа должна вернуть много вершин (только int index, потому что я могу найти соответствующие вершины с помощью Python).
Так что это не интерактивно, это больше похоже на функцию (но она написана на C). Программа script + C (которая является дополнением к blender), которую я пишу, должна быть кроссплатформенной, потому что она будет распространяться.
Программа на самом деле написана на C, и из Python я могу узнать адрес в памяти структуры, которая содержит данные вершин. Если бы только я знал, как это сделать, лучше было бы передать в C-программу только адрес, а оттуда найти все остальные вершины (хранятся в списке).
Но, насколько мне известно, я не могу получить доступ к пространству памяти другой программы, и я не знаю, вызывает ли она программу с помощью каналов или что-то еще, инициализирует новый поток или выполняется внутри скрипта (то есть на самом деле работает под Blender потоком)
Вот источник и blender/source/blender/makesdna/DNA_meshdata_types.h
должно быть определением структуры