Расширения Python - производительность - PullRequest
0 голосов
/ 02 августа 2010

Я использую Boost.Python для расширения функциональности программы Python.Скрипты Python делают много обращений к собственным модулям, поэтому я действительно обеспокоен производительностью преобразования типов python-to-cpp и маршалинга данных.

Я решил попробовать представить методы нативно через Python C API.Может быть, кто-то уже пробовал это раньше?Есть ли успех ... по крайней мере, в теории?

Проблема, с которой я сталкиваюсь, заключается в том, что, как преобразовать PyObject * обратно в экземпляр класса, PyArg_parse предоставляет опцию O &, но я смотрю просто на указатель на объект C ++в памяти ... как я могу получить это в функции?

if ( PyArg_ParseTuple(args, "O", &pyTestClass ) ) { // how to get TestClass from pyTestClass ?? }

Спасибо

1 Ответ

1 голос
/ 02 августа 2010

Я не пробовал Boost.Python, но я расширил Python, используя raw C, а также Cython .Я рекомендую Cython;если вы достаточно осторожны, вы можете получить код с той же эффективностью, что и в сыром C, но с гораздо меньшим количеством стандартного кода.

Относительно эффективности, это относительно.Это зависит от того, что вы хотите сделать и как вы это делаете.Например, то, что я сделал очень часто, - это записал внутренний цикл некоторой обработки изображений или матричной операции на C, и пусть эта функция вызывается Python с указателями на матрицы в качестве аргументов.Сами матрицы не копируются, поэтому накладные расходы минимальны.

...