LINUX.ORG.RU

Импорт C++ кода в Python при помощи пакета SWIG

 ,


0

2

Довольно подробно описано взаимодействие различных модулей при импорте. Рассмотрены различные возможности по настройке импорта, обработка указателей и ссылок, массивов C++, генерация исключений, сериализация импортированных классов, импорт шаблонов. Приведен пример универсального Makefile для импорта.

>>> Подробности

★★★★★

Проверено: post-factum ()

Ответ на: комментарий от alx_me

>Что голубые в европе, что школиё в IT. Аплодирую стоя!!!

anonymous ()
Ответ на: комментарий от anonymous

> Ой, за больное задел.

Судя по потоку гноя, ты задел что-то больное у себя :)

tailgunner ★★★★★ ()
Ответ на: комментарий от AIv

> Про уровень - я заметил тенденцию, чем выше скил у человека, тем более он толерантен и осторожен в своих высказываниях.

Я заметил ещё одну тенденцию, не столь скрытую. Когда проект маленький и на многое не претендует он сочетает в себе низкий порог вхождения и удобство использования. Сумма области применимости, порога вхождения и удобства использования является постоянной. Со временем выясняется, чтобы расширить применимость нужно чем-то пожертвовать. Ключевое слово __чтобы__.

Вопрос: зачем?

Ответ: «Чтобы использовать именно мой продукт, он ведь ещё вырастет станет ещё лучше».

Вопрос: «Вы что решили лучше проблемы больших и уще готовых систем, что так стремитесь дорости до их объёмов?»

Ответ: «Нет не решили, пока оные проблемы нам не встречались, но как встретимся всё равно решим лучше их.»

И насчёт толерантности специалистов. Я заметил иное. Когда специалист молчит и делает умное многозначительное лицо, то как правило это означает дилетанта с дипломом по правилу «промолчишь-сойдёшь за умного». Кроме этого есть ещё сдержанное раздражение (уже для адекватов). Это фаза наступающая когда всё уже сказано, но руководство показало служебное несоответствие очередной раз. А таких молчунов как вы сказали хоть жопой жуй. Как-правило общение происходит по закону зеркала. Вы ему A и он вам A, типа я молодец, и он не глуп.

alx_me ★★☆ ()
Ответ на: комментарий от alx_me

----- Java, Net, python, D, PHP и ruby считаю не удачной идеей. Исторически обусловлены perl, lisp, javascript, awk, bash, C, C++. Новые, перспективные и исторически обусловленные только erlang. Зачем куча всего остального? Изголение и распыление. ----- facepalm^3

anonymous ()
Ответ на: комментарий от anonymous

Да, и еще. В треде бурно обсуждают нужность пистона.

Неправильное, негодное обсуждение. Обсуждать стоило бы SWIG (как наиочевиднейший IT-костылище)

anonymous ()
Ответ на: комментарий от alx_me

> Когда специалист молчит и делает умное многозначительное лицо

Ему чаще всего просто пох. Как раз дилетанты больше всего кричат о выгодах одного языка/технологии/де/тулкита перед другим, требуют статической типизации в языке с динамической типизацией, модификаторы доступа как в его любимом языке, всюду ищут сравнения в попугаях и тд и тп.

zJes ★★ ()
Ответ на: комментарий от cthulhu

знаете, что такое «три порядка?»

Очевидно же, что в пределах ЛОР «порядок» - это множитель :)

Пример: «быстродействие выше на три порядка - не 30 сек, а всего лишь 10!».

anonymous ()
Ответ на: комментарий от alx_me

> Сумма области применимости, порога вхождения и удобства использования является постоянной.

Например баш в эту Вашу тенденцию ну никак не укладывается - у него все три параметра зашкаливают.

И насчёт толерантности специалистов.

Чем выше уровень у человека, тем шире у него кругозор, тем четче он понимает свое место, и с тем большей охотой он дает право на жизнь другим решениям применяющимся в других областях. Чем больше опыта, тем блучше осознаешь пословицу- у каждого додика своя методика.

Вообще то я предполагал, что тут разгорится очередной холивар питон vs все сущее. Мне этого совершеено не хотелось, и я хочу сказать Вам, как авторизованному и наиболее активному оппоненту следующее.

Обсуждаемая статья называется «Импорт С++ кода в Python при помощи пакета SWIG». Статья написана и выложена тут потому, что я разобрался в этом вопросе и посчитал, что это может быть кому то полезно. Судя по отзывам это таки есть, и мне это чертовки приятно.

Я не хочу обсуждать (и считаю неконструктивным обсуждение в данной ветке) сравнение питона и С++ с другими ЯП, потому что для стоящих передо мной задач комплект C++ - питон - свиг является ИМНО оптимальным, и я похоже в своих заблуждениях не одинок. Если Вы считате что это не так - да за ради Бога!

Если Вы хотите меня зачем то переубедить - потрудитесь аргументировать свои мысли, желательно изложите их в виде связного текста, сделав акценты на тех преимуществах, которые я получу при решении СВОИХ задач, отказавшить от используемых мной сейчас технологий и перейдя на пропагандируемые Вами технологии.

Если Вы почему то не в состоянии этого сделать - к г-ну Петрику пожалуйста... Мне больше нечего добавить.

AIv ★★★★★ ()
Ответ на: комментарий от AIv

> > > приложений на Python на порядок выше чем на C++, а их производительность на три порядка ниже

> Ну это вы батенька с порядками перегнули палку; в разы - да.

Цифирь по скорости разработки приведена навскидку из скромного личного пыта и сильно зависит от решаемой задачи, поэтому утверждение такое... весьма усредненное. По производительности - увы, медицинский факт.

Ты балабол с буквы Пи. Три порядка - ~10^3 = тысячи раз. Это явный бред. Тебе не понятно? :)

anonymous ()

посмотрел pdf'ки, есть очепятка в igl.pdf на 3 странице:

ax^2 + bx + x = 0, должно быть +c = 0 ;))) а то не аккуратненько

real_maverick ★★★ ()
Ответ на: комментарий от real_maverick

Спасибо, но вот когда я ее выложу, тогда и буду критику принимать. Все равно ее сильно перерабывать;-)

AIv ★★★★★ ()
Ответ на: комментарий от AIv

Спасибо, но вот когда я ее выложу, тогда и буду критику принимать.

это не критика, а посильная помощь по вычитке, так как pdf'ки понравились и что бросилось в глаза, про то и сказал :))

real_maverick ★★★ ()
Ответ на: комментарий от anonymous

Да простят меня остальные пользователи... не могу удержаться;-)

Ты балабол с буквы Пи. Три порядка - ~10^3 = тысячи раз. Это явный бред. Тебе не понятно? :)


1) Конечно, если гонять файлы по диску, то разницы не будет никакой. Но напр. вот тут http://a-iv.ru/pyart/examples/linef-test.cpp и тут http://a-iv.ru/pyart/examples/linef-test.py два одинаковых куска кода для тупой линейной фильтрации. C-шник собирать с опцией -O3. У меня результаты профилирования такие


$ time ./linef-test.py 100000 1000
0.000516945304358

real 3m48.113s
user 3m45.442s
sys 0m0.168s

$ time ./linef-test 100000 1000
0.000517

real 0m0.631s
user 0m0.616s
sys 0m0.004s

что соотвествует разнице в 380 раз. По мере роста размеров массивов разница растет. Если заюзать SSE, то ускорение будет еще в четыре раза выше.

2) Согласно теории эволюции Дарвина, и судя по тону Ваших постов «балаболами с буквы Пи» являлись в первую очередь Ваши родители, и уже потом Вы - и это действительно ясно абсолютно всем здесь присутствующим. Без всякого сарказма.

AIv ★★★★★ ()
Ответ на: комментарий от anonymous

Вовсе нет. Куда приятней натолкать его по самые гланды, а потом обмазаться с головы до ног и нырнуть в море говна. Попробуй. Прокачай свой низкий скилл, все рассасываешь, а люди уже давно ведрами лопают.

universe_entity ()
Ответ на: комментарий от alx_me

Java, Net, python, D, PHP и ruby считаю не удачной идеей. Исторически обусловлены perl, lisp, javascript, awk, bash, C, C++. Новые, перспективные и исторически обусловленные только erlang. Зачем куча всего остального? Изголение и распыление.

Слона, кита, жирафа и богомола считаю неудачной идеей. Исторически обусловлены только кошки, олени и красноглазые панду. Новые, перспективные и историчеки обусловленные только китайцы.

Ну ты понял. Время покажет, кто выживет и будет «исторически обусловлен». Время.

universe_entity ()
Ответ на: комментарий от AIv

Ну зачем же врать? Разве что вы покажете бенчмарки, доказывающие, что в случае питона «производительность на три порядка ниже», то есть в 1000 раз.

cthulhu ★☆ ()
Ответ на: комментарий от anonymous

>Очевидно же, что в пределах ЛОР «порядок» - это множитель :)

Пример: «быстродействие выше на три порядка - не 30 сек, а всего лишь 10!».

Разве что так. «Особая, лоровская математика»=)

cthulhu ★☆ ()
Ответ на: комментарий от cthulhu

Что бы закрыть тему - разница сильно зависит от задачи. Я такие бенчмарки видел (здесь же, на ЛОР-е, года два назад что ли), но ссылку искать лень. Мой личный опыт эту цифру подтверждает. Выше я привел тест, дающий заявленный результат.

AIv ★★★★★ ()
Ответ на: комментарий от anonymous

И я не устану об этом повторять в каждой теме, упоротая вы школота.

Кроме повторений в каждой теме больше ничего не можешь сделать? Такие вы все чоткие анонимусы в этих наших интернетах, а где дела-то праведные?

Немедля купи себе билет в плацкарт и отправляйся в гости к Гвидо. Возьми и у*би. Залей кровью неверного свой батхерт. Выложи в ютьюбе, собери 9 килокоментов, получи айфон и стань советником президента. Проведи депитонизацию планеты! И имя твое анонимное узнает каждый школьник и памятник твой нерукотворный будет под каждым Лениным.

universe_entity ()
Ответ на: комментарий от AIv

Именно за «врать» приношу извинения, но по этому конкретному вопросу я все же категорически с вами не согласен. Производительность действительно зависит от задачи, но «производительность ниже на три порядка» не являются общей характеристикой питона. Даже с натяжкой.

Поймите меня правильно - это не претензия к документу, который я нахожу весьма полезным. Это претензия к стилю изложения. Выносить буквально в первое предложение такое, очень мягко говоря, спорное утверждение - плохой стиль. Воспринимайте как добрый совет=)

cthulhu ★☆ ()
Ответ на: комментарий от cthulhu

Принято. Выходит и я подвержен общеЛОРОвской заразе - когда что то пишу имею ввиду именно свои задачи, а там это так. Вот кстати бенчмарки

http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=python3&lan...

два порядка видно сразу, но это далеко не предел.

AIv ★★★★★ ()
Ответ на: комментарий от AIv

что-то после просмотра реализации mandelbrot для tcl у меня испарилось доверие к этим бенчмаркам ))

elipse ★★★ ()
Ответ на: комментарий от alx_me

Киса, вы конечно не слышали, но python уже 20 лет, он был создан в 1991

antiPooH ()
Ответ на: комментарий от alx_me

Да, стал. Все что мы выпускаем обязательно проверяется на работоспособность под IE6.

antiPooH ()
Ответ на: комментарий от anonymous

У меня создается впечатление, что GIL не в питоне, GIL в головах анонимусов.

antiPooH ()
Ответ на: комментарий от AIv

> От задачи зависит. В наших задачах фортран уступает плюсам так... от одного до трех порядков.

Вот так, в ТЫСЯЧУ раз? Да вы бредите. К языку это не имеет отношения

anonymous ()
Ответ на: комментарий от AIv

> два одинаковых куска кода для тупой линейной фильтрации.

Внезапно - списки и массивы - это разные вещи. Ай-ай-ай. Одинаковый код, как же.

anonymous ()
Ответ на: комментарий от anonymous

> > два одинаковых куска кода для тупой линейной фильтрации.

Aiv, вот только честно, неужели тот факт, что доступ к элементу списка по индексу медленне доступа к элементу массива вам не смущает и из-за этого факта делаете вывод, что питон - медленее?

anonymous ()
Ответ на: комментарий от anonymous

> ООП, ха-ха, какие там модификаторы доступа? Их нет? Ах какой отсос...

они не нужны. если не помнишь какие члены не предназначены для публичного доступа - используй конвенцию первого символа имени _. никакого функционала отсутствие

А может есть MOP? Нет. Снова отсос.

это опять что-то из лиспа? но вроде как есть какие-то попытки это реализовать (для этого модификация языка не требуется), но видимо никому не нужно.

Ну хоть message-passing? И тут причмокнул.

ну да, все костыли из лиспа просто обязаны реализовать все языки, претендующие на гордый титул ООП!

ФП?

немодифицируемые типы данных есть... лямбда хромает. и хвостовой рекурсии нет. про ФП врут, да.

Вывод типов, статическая типизация,

в динамическом языке? аптека за углом.

TCO, GIL рассосался?

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

Ой, за больное задел.

сочуствую, будьте осторожнее в следующий раз. и подлечиться бы надо вам, да...

Ну в общем белым людям все уже давно ясно, только питонорабы заливают шары тухлой ссаниной Гвидо, да свои мантры повторяют.

по мантрам вы явно специалист :) и по ссание видимо тоже ... но не надо так вот по себе судить об остальных.

а гвидо я бы тоже выгнал, да только кто ж мне даст :) начальная идея хорошая, но сейчас он упоротый совсем, не принимает ничего что не понимает, а понимает он немногое...

anonymous ()
Ответ на: комментарий от AIv

два одинаковых куска кода для тупой линейной фильтрации

ты на Питоне писать не умеешь. Сравни свой код с этим:

#!/usr/bin/python

import sys, math, array

N, w = int(sys.argv[1]), int(sys.argv[2])
src, alpha = array.array('d', (math.sin(i) for i in xrange(N))), 1./(2*w+1);

tgt = array.array('d', (sum(src[i-w:i+w])*alpha for i in xrange(w, N - w)))
S = sum(tgt)

print S 

Здесь написано то, что ты на плюсах написал, но по-питоньи.

и на быстродействие посмотри, вовсе не в 380 раз будет медленнее, чем c++, а примерно в 20

ps. python-2.6

anonymous ()
Ответ на: комментарий от anonymous

>> От задачи зависит. В наших задачах фортран уступает плюсам так... от одного до трех порядков.

Вот так, в ТЫСЯЧУ раз? Да вы бредите. К языку это не имеет отношения

Это имеет отношение к алгоритмам, которые могут быть реализованы на данном ЯП без потери производительности. Если и правда интересуетеся - пошукайте аббревиатуру LRnLA. Дает означенный выше выигрышь, на фортране не реализуется (ну можете попробовать конечно, если у Вас получится - будет весьма интересно).

Внезапно - списки и массивы - это разные вещи. Ай-ай-ай. Одинаковый код, как же.

Переписал через array (лежит там же). Ай-ай-ай - 400 раз! Если внутренний цикл переписываем через сумму от генератора - вдвое лучше, 200 раз. Хотите что б я на С взял список?:-)

ты на Питоне писать не умеешь. Сравни свой код с этим:

Да куда мне, убогому... а если инициализация src плохо ложится в ФП? А если фильтрация не по прямоугольному шаблону а скажем по косинунсу? А если и само тело цикла хорошо на ФП не ложится? Все, приехали... ЭТО ТЕСТ - СРАВНЕНИЕ ПРОИЗВОДИТЕЛЬНОСТИ ДВУХ ЯП НА ОДИНАКОВОМ НАБОРЕ ДЕЙСТВИЙ С ВЫПОЛНЯЕМЫХ В РАМКАХ ОДИНАКОВОЙ ИДЕОЛОГИИ. Вы еще тут вспомните, что линейная фильтрация пишется не за O(N*M) а за O(N), ага...

А про реализацию шредов питоновских забыли? У меня узел кластера - 48 ядер. Еще один множитель, кроме SSE. Ай? Три порядка - это еще мало...

Возьмите ка батенька, да сбацайте на питоне метод FDTD для 3D ур-й Максвелла (вы то в отличии от меня писать умеете, вам это как два байта переслать, да?). Можете с ФП. Потом протестируйте производительность - у коллег на С++ 20 тактов на ячейку на шаг для области 512х512х512. Я б оооочень хотел видеть ваше лицо, когда у вас будет 20000 тактов... а то и 200 тыс. Ой?

Лично у меня как то больше нет никакого желания доказывать сонму хамящих анонимусов очевидные вещи, только потому что они в них не верят. 'Этого не может быть потому, что этого не может быть никогда!'. К Петрику, к Петрику...

AIv ★★★★★ ()
Ответ на: комментарий от AIv

> Рад быть полезным;-)

насчет других pdf-ок, еще раз - они находятся в стадии разработки. Вы конечно можете их читать, но не советую их грузить в какие то базы непосредственно, т.к. они будут обновлятся.

Убрать их что ли от греха вообще...

И тут все ломанулись скачивать. :)))

x86_64 ★★★ ()
Ответ на: комментарий от x86_64

Я б убрал, но этот линк давался в частности студентами и еще много кому... да ладно, пусть их.

AIv ★★★★★ ()
Ответ на: комментарий от AIv

и чо? и ослу ясно, что на питоне математика еле шевелится.

посл ее отладки, всё переписывается на си и всё начинает летать. о том и новость!

и замечу - если бы то же самое сразу писалось на си, на отладку бы куда больше времени ушло...

anonymous ()
Ответ на: комментарий от anonymous

> посл ее отладки, всё переписывается на си

точнее не всё, а математичееский движок :)

anonymous ()
Ответ на: комментарий от anonymous

Ослу ясно, Вам ясно, мне ясно, а некоторым Вашим одноименным товарищам неясно... о том и флуд был.

AIv ★★★★★ ()
Ответ на: комментарий от alx_me

>> у пистона одна область применения: автоматизация мелкой возни (скрипты)

Не уловил выгоды от его изобретения при живом perl/awk/sed/bash(zsh).

Выгода: легкая привязка к плюсам.

Хотя, да. Коряв он так же как и все остальные.

x86_64 ★★★ ()
Ответ на: комментарий от zJes

> Мне наоборот больше нравится 3, так как она более целостна и логична. Покажи изврат, который не пойдет под 3 версией? :)

Хм.. Может ты поможешь найти модуль для работы по ssh. А то как то ....

x86_64 ★★★ ()
Ответ на: комментарий от x86_64

Ну о чем спич то? Ясно же не все модули портированы, хотя pssh значится в списке для питона 3.

zJes ★★ ()

Интересно, спасибо. Скачал остальные пдфки, посмотрю)

breezy ()
Ответ на: комментарий от zJes

> Ну о чем спич то? Ясно же не все модули портированы, хотя pssh значится в списке для питона 3.

Хм... Это не спичь, просто подумал, если в 3-ий используешь, значит знать можешь.

pssh - это совсем не то.

Он работает запуская ssh. Нужна реализация модуля позволяющего работать из под систем без нативного ssh. Для 2-го такая есть, для 3-го нет и никто не занимается :(

x86_64 ★★★ ()
Ответ на: комментарий от x86_64

Ну я подумал, что это был сарказм, что ты знаешь немного плачевную ситуацию с переводом пакетов. :)
Кстати, по сравнению с прошлым (хотя бы с год назад), то есть неплохое ускорение с переносом пакетов, так что вполне возможно, то в течении года-двух все может нормализоваться.

zJes ★★ ()
Ответ на: комментарий от cthulhu

А, еще насчет производительности - наткнулся сейчас, Г. Россум, Ф.Л.Дж. Дрейк, Д.С. Откидач. «Язык программирования Python». 2001, раздел 20.1, стр 258:

«В то время как реализованный на языке Python модуль pickle работает достаточно медленно, реализованный на C модуль cPickle работает иногда почти в 1000 раз быстрее.»

AIv ★★★★★ ()
Ответ на: комментарий от anonymous

Скорость скомпилированного компилятором кода. Да и разработки, если вы используете много библиотек, созданных в эпоху господства C++. Что касается кода, то C++ выдаёт такой машинный код, лучше которого только код от C компилятора, да от некоторых других эффективных компиляторов. Ни .NET, ни Java на такое просто не способны. А они на порядки быстрей, чем Python или любой другой скриптовый язык. Выход один, некоторые части программы писать на C++, или на C. Если же скорость не нужна, то Python хоть и тормоз редкостный, но удобен. Если нужен язык программирования сверхвысокого уровня, и при этом с неплохой скоростью, то выход один-юзать Lisp. Так сделали в своё время создатели Crash Bandicoot, прикольной игры для игровых консолей. Но Lisp слишком отличается от остальных языков программирования, поэтому его редко используют. А Python наоборот, неказист и коряв, но прост и понятен для людей, привычных к языкам из семей C и Pascal. Поэтому и популярен. Это такой Basic для 21 века. И даже то, что Scheme намного совершенней чем Python, ситуацию не изменит. С++ лучше чем Basiс, но много лет у Basic было много адептов из-за его простоты.

lucentcode ★★★★★ ()
Ответ на: комментарий от AIv

Есть плагин для работы с .bib, но как он работает, я не знаю.

lucentcode ★★★★★ ()

Спасибо за статью.
О таких вещах пока не задумывались, так как необходимости не было. Пользуемся внешними библиотеками.

Кого скорость работы не устраивает, подумайте над архитектурой системы.
У нас Питон трудится асинхронно и решает 50% задач фирмы. Мы его за это любим.

pythonist ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.