2015-06-05 2 views
1

Я пытаюсь разработать интерфейс плагина в python для популярной 3d-программы под названием Blender 3D. Цель интерфейса плагина - расширить некоторые функции программы через python.Переписать часть программы c/C++ в python

Теперь моя проблема в том, что я пытаюсь оценить влияние производительности. Я заменил существующую функциональность, написанную в c-коде, чем-то написанным на python.

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

Таким образом, операции, которые я выполняю, работают над частями данных, которые обычно не имеют более 30 или 40 точек ввода. И самое большее операции, которые я выполняю на них, имеют сложность log (n) * n^2.

Но я буду создавать много объектов python каждую секунду, поэтому я уже готов реализовать объединение для утилизации объектов.

Теперь я в основном обеспокоен тем, что код python будет работать в 100 раз медленнее, чем код c и замедлить работу приложения. Я должен беспокоиться?

В лучшем случае я буду выполнять 8500 вычислений в одном вызове функции python. Эта функция будет вызываться каждый раз при визуализации интерфейса приложения.

+1

Вы посмотрели 'ctype'? Вы могли бы просто создать свои объекты на Python и выполнить свой расчет с помощью вашего кода C. Есть некоторые трюки, чтобы передать объект Python в программу C, но если вы знакомы с C, он должен быть «легким». – CoMartel

+0

. Обычный способ решения этих проблем - профилирование: посмотрите, будут ли компоненты C++, которые вы хотите заменить, взять большой кусок времени выполнения. Если нет, то замена их на Python не будет слишком дорогостоящей. И, поскольку у вас есть время профилирования для частей C++, вы можете измерить каждую новую функцию/метод Python/stanza и сравнить ее время выполнения с эквивалентным временем работы C++. – boardrider

+0

Говоря это, вы будете медленнее на Python, но я не знаю, насколько это зависит от вашего приложения. 'numpy' (и другие) работает довольно быстро, потому что он имеет много функций, реализованных в C. – CoMartel

ответ

1

Вопрос использования c или python будет зависеть от использования вашей работы. Это функция, которую разработчики blender будут принимать в разработку блендера? Вы ожидаете, что многие пользователи блендера захотят его использовать? Приложение python позволяет вам разрабатывать свою работу за пределами основной разработки блендера и предоставлять многим пользователям доступ к ней, а патч к c-коду, который требует от пользователя компиляции собственной версии, уменьшит пользователей.

Вы также можете посмотреть, как скомпилировать ваш код c в бинарную библиотеку, которая включена в аддон python и загружается как модуль python. См. Два дополнения Pyroevil, созданные с использованием cython - molecular и cubesurfer, некоторые готовые двоичные файлы доступны на его main website. Я не уверен, что если использование cython упрощает создание модуля python или нет, вы также можете использовать cython только как клей между python и вашей библиотекой.

Смежные вопросы