Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 3, 2007 18:17:30

niro
От:
Зарегистрирован: 2006-10-04
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование C библиотек

Где прочитать про написание C библиотек для python'а, без использования swig,pyrex и т.д.



Отредактировано (Июнь 3, 2007 18:20:53)

Офлайн

#2 Июнь 3, 2007 18:26:59

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование C библиотек

Офлайн

#3 Июнь 3, 2007 18:36:57

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  3  -
Профиль   Отправить e-mail  

Использование C библиотек

Вот еще на русском http://www.intuit.ru/department/pl/python/13/



Офлайн

#4 Июнь 3, 2007 23:58:13

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Использование C библиотек

Если только C - перечисленные примеры отлично покрывают тему.
Я сам на С API пишу несложные модули.
Но тем не менее советую обратить внимание на boost.python (boost.org).
На нем очень легко делать замотки как С++ (осносвное назначение, и нет ему конкурента, thanks to Dave Abrahams) так и простого С API.
Еще (если речь идет о С) сторит посмотреть на ctypes - они позволяют завернуть в питон практически весь С код без написания хотя бы одной строчки на С/С++



Офлайн

#5 Июнь 4, 2007 09:00:22

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Использование C библиотек

Книжка Марка Лутца “Программирование на Питон”
На языке оригинала есть в книжных закромах. Предыдущее издание было переведено на русский. Очень добротная книга. В том числе содержит материалы по расширению и встраиванию Питона.

Лучшее описание как писать расширения на Сях, которое я видел.



Офлайн

#6 Июнь 4, 2007 10:30:49

guest01
От:
Зарегистрирован: 2007-03-24
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование C библиотек

Интересная тема. Мало в этом понимаю, но узнать хотелось бы. Да и часто ли возникает потребность в написании своих сишных модулей?



Отредактировано (Июнь 4, 2007 11:21:27)

Офлайн

#7 Июнь 4, 2007 13:59:31

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Использование C библиотек

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



Офлайн

#8 Июнь 4, 2007 17:29:22

guest01
От:
Зарегистрирован: 2007-03-24
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование C библиотек

Андрей Светлов
либо когда надо резко ускорить алгоритмы обработки простых данных вроде буферов большого размера.
Тогда делается простой модуль.
А пример можно ? Пожалуйста.

Андрей Светлов
Присутствует и другой случай, куда более сложный.
Мы используем boost.python для оборачивания 3D движка в питон. Эта работа куда более нетривиальная.
А как же медлительность интерпритатора? Как я понимаю, для 3D питон не очень хорош. Особенно для обработки больших массивов графики. Или я чего не понимаю …



Офлайн

#9 Июнь 5, 2007 14:34:11

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Использование C библиотек

Пример? Можно, конечно.
Поскольку моя работа сейчас тесно связана с 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 приложил руку к рождению этой игрушки.
А еще на питоне можно очень быстро создать прототип, его обкатать и реализовать уже на С++



Офлайн

#10 Июнь 5, 2007 16:04:21

guest01
От:
Зарегистрирован: 2007-03-24
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование C библиотек

Андрей Светлов
Пример? Можно, конечно.
Спасибо. Я тут думал попробывать этим летом поднатареть в pygame. Интересно все таки. Осталось только сессию сдать.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version