Найти - Пользователи
Полная версия: Использование C библиотек
Начало » Python для экспертов » Использование C библиотек
1 2
niro
Где прочитать про написание C библиотек для python'а, без использования swig,pyrex и т.д.
tabajara
Опис апі - http://docs.python.org/api/api.html і
як писати - http://docs.python.org/ext/ext.html
alafin
Вот еще на русском http://www.intuit.ru/department/pl/python/13/
Андрей Светлов
Если только C - перечисленные примеры отлично покрывают тему.
Я сам на С API пишу несложные модули.
Но тем не менее советую обратить внимание на boost.python (boost.org).
На нем очень легко делать замотки как С++ (осносвное назначение, и нет ему конкурента, thanks to Dave Abrahams) так и простого С API.
Еще (если речь идет о С) сторит посмотреть на ctypes - они позволяют завернуть в питон практически весь С код без написания хотя бы одной строчки на С/С++
bialix
Книжка Марка Лутца “Программирование на Питон”
На языке оригинала есть в книжных закромах. Предыдущее издание было переведено на русский. Очень добротная книга. В том числе содержит материалы по расширению и встраиванию Питона.

Лучшее описание как писать расширения на Сях, которое я видел.
guest01
Интересная тема. Мало в этом понимаю, но узнать хотелось бы. Да и часто ли возникает потребность в написании своих сишных модулей?
Андрей Светлов
Тема на самом деле довольно простая. Если ограничится функциями и не забираться в классы.
Потребность у меня возникает регулярно. Либо с целью достучаться до какой-нибудь чужой библиотеки с С API, либо когда надо резко ускорить алгоритмы обработки простых данных вроде буферов большого размера.
Тогда делается простой модуль.
Присутствует и другой случай, куда более сложный.
Мы используем boost.python для оборачивания 3D движка в питон. Эта работа куда более нетривиальная.
guest01
Андрей Светлов
либо когда надо резко ускорить алгоритмы обработки простых данных вроде буферов большого размера.
Тогда делается простой модуль.
А пример можно ? Пожалуйста.

Андрей Светлов
Присутствует и другой случай, куда более сложный.
Мы используем boost.python для оборачивания 3D движка в питон. Эта работа куда более нетривиальная.
А как же медлительность интерпритатора? Как я понимаю, для 3D питон не очень хорош. Особенно для обработки больших массивов графики. Или я чего не понимаю …
Андрей Светлов
Пример? Можно, конечно.
Поскольку моя работа сейчас тесно связана с 3D графикой, пример будет оттуда.
Имеем картинку 342x234 пикселя. В 3d ее принято называть текстурой. Хотим нарисовать один к одному. Это, например фотография или кадр видео.
Старые видеокарты - GeForce FX и древнее от NVidia, есть аналогичная планка у ATI (у них подобным недостатком страдают куда более новые карты), я уже не говорю о Intel IGP - не могут работать с ними. Требуется нак называемый POT - power of two. То есть я должен предоставить текстуру с размерами степени двойки - 2,4,8,16,32,64… Ближайшие будут 512х256. Мне не нужно растягивать текстуру на этот размер - даже при хорошем антиалиасинге пиксели смажутся. А еще раз смажутся при попытке отрисовать эту текстуру в прямоугольник 342x234. В результате я себя на фотографии узнаю с трудом :)
К счастью, при рисовании можно указать, какую часть текстуры вывести в эти 342x234. Т.е. можно заполнить черным цветом (или вообще мусором) эти ненужные мне края - и все получится.
Теперь маленькое отступление. Пример из библиотеки ocean.sourceforge.net, которая создавалась для обеспечения пользовательского интерфейса в играх. И сделана практически целиком на питоне. Чтобы прокрутить исходную картинку (питон строку байтов, на самом деле) в результат мне требуется цикл, который состоит из s += padding, а потом s += blackString*leftRows. Питон реагирует медленно и дико тормозит. Текстур много, и меняются они часто (особенно для видео). Если я передаю исходную текстуру в свой Python extension - все делается мгновенно. Есть и более сложные примеры с хитрой обработкой входного буфера (одна декомпрессия чего стоит).

Теперь о 3d и питоне. Питон не подходит для рисования больших сцен. Но он прекрасно годится для их построения, работы с сетью, написания скриптов и искусственного интеллекта персонажей. А рисовать должен C++ по построенной питоном сцене (а еще считать анимацию, физику, звук и прочее). Самый громкий пример - http://www.eve-online.com. Кстати, создатель stackless python приложил руку к рождению этой игрушки.
А еще на питоне можно очень быстро создать прототип, его обкатать и реализовать уже на С++
guest01
Андрей Светлов
Пример? Можно, конечно.
Спасибо. Я тут думал попробывать этим летом поднатареть в pygame. Интересно все таки. Осталось только сессию сдать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB