Форум сайта python.su
Здравствуйте!
Написал я программу на питоне, а она работает в сотни раз медленнее, нежели могла бы. Посему я решил переписать её на С++. Но хотелось бы иметь к ней доступ из питона, ибо, во-первых, переписывать ГУИ совершенно ни к чему, во-вторых, из питона удобнее отлаживать. Посему вопрос - через что организовать интерфейс питон-С++? Я почитал официальное руководство, там, насколько я понял, предлагают каждый раз пересобирать питон (!) с моей библиотекой. А на другом сайте есть статья, в которой характеризуются ажно десять различных методов достижения означенной цели. Очевидно, что я не могу сколько-либо адекватно сделать выбор, ибо являюсь новичком как в питоне, так и в С++. Посему я прошу вас сделать этот выбор за меня.
Грубо говоря, программа-минимум - вызывать из питона функцию, отвечающую за расчёт, и принимать несколько двумерных массивов чисел для отрисовки. Программа-максимум - иметь доступ ко всем моим С++ным функциям и объектам из питона, дабы отлаживать в интерактивном режиме.
Система - линукс (ubuntu), возможно, придётся адаптировать под windows.
Заранее благодарен.
Офлайн
для “с” посмотрите модуль ctypes Для “c++” boost python
Офлайн
Попробуйте Numpy - http://numpy.scipy.org/
Офлайн
doza_andПосмотрел, там вроде как надо собирать с помощью build.boost, а я обычный make с грехом пополам асилил. Вопщем, я сделал вывод, что пока я не готов это дело осваивать, лучше всё на голом С++ напишу. Уже сделал подобие графики через ncurses.
Для “c++” boost python
alex312Ежели я ничего не путаю, то я numpy собственно использовал. Матрицы умножает на ура, а во всём остальном совершенно не помогает.
Попробуйте Numpy - http://numpy.scipy.org/
Офлайн
Обедающий философОбычно бывает 3 ну 5 раз медленнее, иногда вовсе не медленнее чем c++. Если в сотни раз - есть непонимание того что делается
в сотни раз медленнее
Обедающий философc++ посложнее питона будет (намного). Хотя конечно c++ + python наверное сложнее каждой из частей.
я не готов это дело осваивать, лучше всё на голом С++ напишу
Отредактировано (Июль 9, 2011 21:37:47)
Офлайн
doza_andВот я как раз сегодня до сколько-либо работоспособного состояния довёл - получилось в несколько десятков раз быстрее.
Обычно бывает 3 ну 5 раз медленнее, иногда вовсе не медленнее чем c++. Если в сотни раз - есть непонимание того что делается
- его надо устранять.
doza_andНу скажем так, есть прямоугольная сетка, на ней некоторое множество модельных организмов (т. н. агентов). Внутри каждого агента нейронная сеть (собственно в ней и происходит умножение матрицы на вектор, матрица размером около 10*10). И каждый агент может передвигаться из клетки в клетку, общаться с другими агентами, размножаться (попутно мутируя) и умирать. То бишь получается навроде генетического алгоритма (такие вещи ещё называют “искусственной жизнью”, хотя данная конкретная модель не сказать чтобы уж очень живая).
Вы конкретнее задачу опишите - может кто что и присоветует.
Офлайн
Да, думаю Агентов тут надо сажать в c++ вместе с сеткой в которой они живут. В этой задаче в питоновскую часть наверное стоит вынести сбор статистики и расчет функционалов (они ведь наверное нужны?) Они достаточно часто меняются. Кроме того можно туда отправить и графическое отображение состояния. Чистый ctypes будет тут не очень удобен - для работы скорее всего потребуется доступ к классам.
тут swig или boost наиболее частые решения. bjam не очень страшный зверь. Вам нужно только цеплять питон тогда - действуете по инструкции и все изучать премудрости jam не требуется. Освоение будет быстрее чем освоить make. Если будут проблемы спрашивайте.
Питон очень сильно помогает не столько для отладки сколько для анализа результатов - когда надо посмотреть то одно то другое.
Отредактировано (Июль 9, 2011 23:28:51)
Офлайн
Ну по идее можно на С++ статистики в лог писать, а на питоне читать файл и строить графики, таким образом непосредственная связка не нужна. Кстати, можно ли это делать в реалтайме, то бишь запускать из питона программу на С++ и читать питоном файл по мере его наполнения?
Непосредственную связку С++ и питона, видимо, всё же изучу попозже, ежели появится необходимость. Спасибо за помощь!
Офлайн
doza_andЭто мы уже двадцать раз проходили. Все зависит от масштаба. Если ваши желания это сделать чтото типа программы wc (word count) на этом можно остановиться.
можно на С++ статистики в лог писать
Отредактировано (Июль 10, 2011 16:29:03)
Офлайн