Pull to refresh

PyCon Russia 2021 пройдет 5-6 сентября. Принимаем заявки на доклады

Reading time 3 min
Views 977
IT-People corporate blog Python *Django *Big Data *Conferences

Этот PyCon Russia проведем в стиле (пост)апокалипсиса :) Предугадать события невозможно, но сейчас подготовка идет полным ходом: программа наполовину собрана, спикеры готовятся, огромная база отдыха на берегу Клязьменского водохранилища забронирована. Смотрите, какие темы ждем в этом году, успевайте подавать заявки и выступите на самой большой и душевной русскоязычной конференции питонистов.

Читать далее
Total votes 3: ↑3 and ↓0 +3
Comments 2

Осваиваем Python. Унция ноль. Введение.

Reading time 4 min
Views 126K
Programming *

Предыстория



Присоединяюсь к MaxElc, DarwinTenk и Devgru :) Начинаю цикл статей посвященных Python. Сам я имею некоторый опыт обращения с PHP и Java. Но каждый раз, при относительном освоении какого-то инструмента — оставалось определённое неудовлетворение им, связанное с чем-то конкретным, и поиски продолжались. На сегодняшний день наиболее близко к идеалу в моих глазах стоит Python. Идеал недостижим — это понятно, посему и у Python есть недостатки. Прежде всего — это скорость выполнения, однако, эта проблема решаема несколькими путями и об этом мы обязательно поговорим чуть позднее.
Сам я начал осваивать Python буквально недавно. Начиная этот цикл статей — я преследую несколько целей. Во-первых, это дополнительная само мотивация + интерактивность, во-вторых, опыт. В-третьих, блуждая по просторам рунета — вижу, что Python куда менее популярен, чем в мире. Ситуацию надо исправлять :)
В соответствии с идеологией Python, а именно с тем, что одни из главных его козырей — это быстрота в освоении и скорость разработки, мы достаточно быстро, практически тезисно пронесёмся по основам синтаксиса и построения программ и перейдём к основной цели данного цикла — освоение django.
Итак, мы начинаем.
Читать дальше →
Total votes 90: ↑78 and ↓12 +66
Comments 86

Анализ участников

Reading time 1 min
Views 756
Django *
Translation
Некоторым из вас, возможно, будет интересно узнать, что более 900 уникальных участников было задествовано в разработке Django, начиная с 1 января 2007 года. Данные основаны на логах SVN.
Должен заметить, что сообщество очень сильное, особенно в сравнеии с другими, широко известными проектами:
  • Django: 906
  • Pylons: 80
  • PyPy: 240
  • Linux Kernel: 4043
  • PostgreSQL: 150
  • Apache HTTP server: 118
  • SQLAlchemy: 36
  • Python: 428

Необходимо учесть, что все анонимные и гостевые коммиты считались за одного участника, если конечно проект позволял таковые.
Total votes 30: ↑24 and ↓6 +18
Comments 8

Python и скорость: Unladen Swallow, PyPy, Cython

Reading time 4 min
Views 7.5K
Python *
Краткий перевод обсуждения Recommendation against Python?:

kng
Я слышал, что сотрудникам Google не рекомендуют использовать Python для новых проектов, что мне кажется глупым, учитывая как много питоновского кода и поддержки самого языка Python исходит из Google. Я начал поиски информации, но ничего не нашел. Вы знаете что-то об этом или это просто слухи?

Collin Winder
Даже простой здравый смысл ограничивает применимость Python, когда речь идет о масшабах Google — он не так быстр как Java или C++, работа с тредами хромает, расходуется больше памяти и т.д. Одно из требований, с которым мы сталкиваемся при проектировании новых систем, это «Что мы будем делать, если нагрузка возрастет в 10 или в 100 раз? Что мы будем делать, если целая планета решит что наш новых сервис офигителен?» Любая технология, которая усложняет соблюдение этого требования — и я считаю, что Python попадает в эту категорию — должна быть отвергнута и даже прочие её полезности не играют важной роли в этом случае. Приходится балансировать слабые и сильные стороны Python — ваши разработчики могут быть более продуктивными, используя Python, но если им придется крепко поработать над масштабированием под большую нагрузку, то удастся ли вам вырваться с Python вперед? И т.д.

Unladen Swallow планирует сместить этот баланс — чтобы сделать возможным использовать Python в большем числе проектов, где сейчас его использовать еще нерационально. Но панацеей это не будет. Python все еще будет медленнее, чем C или Java, будет использовать больше памяти и ужасно работать с тредами, пока кто-нибудь не решит инвестировать ресурсы в Python в объеме, сравнимом с ресурсами, которые Sun инвестировала в JVM. Я надеюсь, что внимание к производительности Python со стороны разработчиков будет носить лавинообразный характер — чем больше компаний будет заинтересовано в этом, тем больше ресурсов будет инвестировано, тем больше аспирантов будут работать над Python (и выкладывать результаты своей работы) и т.д.
Читать дальше →
Total votes 60: ↑56 and ↓4 +52
Comments 43

Вышел PyPy 1.2 и ускорил Python в разы!

Reading time 2 min
Views 14K
Python *
Вышел PyPy 1.2. Основное отличие — наличие JIT компилятора.
Чтобы долго не объяснять что это и зачем — простой тест:

cnt = 10 * 1000 * 1000
for _ in xrange(cnt): 
    i = i + 1


5.8млн операций сложения в секунду на обычном СPython 2.6 (python test.py)
42.5млн операций в секунду на PyPy 1.2 (pypy test.py)
WinXP SP3, Core2Duo.

Да, в 7 раз быстрее он тест сделал! И это не только на синтетическом тесте: «django» в 3 раза быстрее, «n-body» в 7 раз быстрее… Я не знаю что такое тест «richards», но он теперь вообще в почти 12 раз быстрее. Смотрите результаты сами.

Читать и качать (из раздела "«JIT compiler» version"). 64-bit версии пока нет. А unladen-swallow нервно курит... Под катом еще несколько невероятностей (stackless, «песочница для python кода»)…
Читать дальше →
Total votes 94: ↑82 and ↓12 +70
Comments 94

PyPy научился напрямую загружать расширения CPython'а

Reading time 2 min
Views 1.8K
Python *
Translation
PyPy теперь умеет загружать и запускать расширения CPython'а (то есть, .pyd и .so файлы) напрямую, при помощи новой подсистемы, которая называется CPyExt. В отличие от решения, представленного в другом блог-посте (в котором модули расширения типа numpy запускались на CPython и проксировались через TCP), новое решение больше не требует запущенного CPython. Мы пока ещё не достигли полной бинарной совместимости (как Ironclad), но, в большинстве случаев, достаточно просто перекомпилировать расширение.

Единственное требование — необходимые функции C API из CPython должны быть реализованы в PyPy. Если вы пользователь или автор модуля, и вам не хватает некоторых функций в PyPy, мы приглашаем вас их реализовать. Уже довольно много людей (включая много новых контрибьюторов) уже включились в разработку и реализовали некоторые функции для того, чтоб их любимые модули заработали. В конце поста — список имён.

Кстати о скорости. Несмотря на то, что существуют накладные расходы на запуск этих модулей, когда мы запускаем движок регулярных выражений из CPython (_sre.so) и проходим бенчмарк spambayes из набора бенчмарков Unladen Swallow (см speed.pypy.org), то получаем значительное ускорение: тест стал вдвое быстрее по сравнению с движком регулярок, встроенным в PyPy. Из закона Амдала следует, что _sre.so должен работать в несколько раз быстрее, чем встроенный движок.

В данный момент идёт работа над PIL и другими модулями. Например, поддержка distutils уже почти завершена. И если вы хотите участвовать в этом или получить больше информации о том, как использовать эту новую возможность, заходите на наш IRC-канал #pypy на freenode.

Участники разработки CPyExt:
Total votes 49: ↑41 and ↓8 +33
Comments 11

Компания Microsoft представила поддержку Python в Visual Studio

Reading time 1 min
Views 4.8K
Visual Studio *
image

Компания Microsoft выпустила в режиме бета-тестирования пакет Python Tools for Visual Studio (PTVS), предназначенный для обеспечения поддержки языка Python в интегрированной среде разработки Visual Studio 2010. Код пакета разработан в недрах Microsoft и открыт в рамках лицензии Apache 2.0.

Читать дальше →
Total votes 154: ↑138 and ↓16 +122
Comments 72

Руководство: пишем интерпретатор с JIT на PyPy

Reading time 12 min
Views 11K
Python *
Translation
Все исходные коды и примеры из этой статьи доступны здесь.

Когда я первый раз смотрел проект PyPy, мне потребовалось некоторое время, чтобы выяснить, что он из себя представляет. Он состоит из двух вещей:

— набор инструментов для написания интерпретаторов языков программирования;
— реализация Питона с применением этого набора инструментов.

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

Я взялся за это руководство для того, чтобы лучше понять как работает PyPy и что он из себя представляет. Предполагается, что вы очень мало знаете о PyPy, поэтому я начну с самого начала.

Читать дальше →
Total votes 78: ↑74 and ↓4 +70
Comments 6

Исследование производительности сервера SockJS

Reading time 4 min
Views 14K
Python *
Доброе время суток!

Так уж сложилось, что я занимаюсь всякими разнообразными push технологиями с использованием Tornado. Чуть ранее описывал Tornadio2, серверную реализацию протокола socket.io поверх Tornado.

Теперь хочу представить похожий проект — sockjs-tornado.

Для тех кому не очень интересно, есть другая полезная информация: сравнительное нагрузочное тестирование PyPy 1.7 против CPython 2.6.6, sockjs-node и socket.io (оба на node.js 0.6.5). Все под катом :-)
Читать дальше →
Total votes 57: ↑56 and ↓1 +55
Comments 13

Бенчмарк HTML парсеров

Reading time 10 min
Views 81K
High performance *Programming *HTML *
Переписывал в островке кусок одного сервиса с Python на Erlang. Сам сервис занимается тем, что скачивает по HTTP значительное количество однотипных HTML страниц и извлекает из них некоторую информацию. Основная CPU нагрузка сервиса приходится на парсинг HTML в DOM дерево.

Сперва захотелось сравнить производительность Erlang парсера mochiweb_html с используемым из Python lxml.etree.HTML(). Провел простейший бенчмарк, нужные выводы сделал, а потом подумал что неплохо было бы добавить в бенчмарк ещё парочку-другую парсеров и платформ, оформить покрасивее, опубликовать код и написать статью.
На данный момент успел написать бенчмарки на Erlang, Python, PyPy, NodeJS и С в следующих комбинациях:
  • Erlang — mochiweb_html
  • CPython — lxml.etree.HTML
  • CPython — BeautifulSoup 3
  • CPython — BeautifulSoup 4
  • CPython — html5lib
  • PyPy — BeautifulSoup 3
  • PyPy — BeautifulSoup 4
  • PyPy — html5lib
  • Node.JS — cheerio
  • Node.JS — htmlparser
  • Node.JS — jsdom
  • C — libxml2 (скорее для справки)

В тесте сравниваются скорость обработки N итераций парсера и пиковое потребление памяти.

Интрига: кто быстрее — Python или PyPy? Как сказывается иммутабельность Erlang на скорости парсинга и потреблении памяти? Насколько быстра V8 NodeJS? И как на всё это смотрит код на чистом C.
Читать дальше →
Total votes 72: ↑66 and ↓6 +60
Comments 36

Вышла первая бета PyPy3 с поддержкой Python 3

Reading time 1 min
Views 6.5K
Python *
imageРазработчики PyPy представили первую бету выходящего релиза PyPy3. Это первый релиз, в котором поддерживается Python 3 (3.2.3).

Загрузить можно по ссылке. В бете есть несколько известных проблем, включая серьезную регрессию производительности (к примеру, пока что пишут, что выполнение одной и той же программы может быть в 37 раз медленнее, чем это было на PyPy 2.0.2). Проблемы обещают исправить к финальному релизу.

Доступны версии для x86, работающие под Linux 32/64, Mac OS X 64 и Windows 32; поддерживается и ARM с Linux 32 — ARMv6 (Raspberry Pi) и ARMv7 (Chromebook).

Источник: PyPy Status Blog
Total votes 26: ↑24 and ↓2 +22
Comments 8

Почему существует так много Питонов?

Reading time 9 min
Views 132K
Python *
Translation
Питон изумителен.

Удивительно, но это довольно неоднозначное заявление. Что я имею ввиду под “Питоном”? Может, абстрактный интерфейс Питона? Или CPython, распространенная реализация Питона (не путать с похожим по названию Cython)? Или я имею ввиду что-то совсем иное? Может, я косвенно ссылаюсь на Jython, или IronPython, или PyPy. Или может я отвлекся так сильно, что говорю о RPython или RubyPython (которые очень сильно отличаются).

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

При работе с Питоном я столкнулся с кучей таких технологий. Инструменты *ython. Но лишь недавно я уделил время, чтобы разобраться, что они собой представляют, как они работают и почему они (каждая по-своему) необходимы.

В этом посте я начну с нуля и пройдусь по разным реализациям Питона, а закончу подробным введением в PyPy, за которым, по моему мнению, будущее языка.

Все начинается с понимания того, чем на самом деле является “Питон”.
Читать дальше →
Total votes 169: ↑161 and ↓8 +153
Comments 73

Ускорение Python-скриптов без приложения умственных усилий

Reading time 3 min
Views 25K
Python *
Одно из распространенных применений Python — небольшие скрипты для обработки данных (например, каких-нибудь логов). Мне часто приходилось заниматься такими задачами, скрипты обычно были написаны наспех. Вкупе с моим слабым знанием алгоритмов это приводило к тому, что код получался далеко не оптимальным. Это меня ничуть ни расстраивало: лишняя минута выполнения не сделает погоды.

Ситуация немного изменилась, когда объем данных для обработки вырос. И после того, как время выполнения очередного скрипта перевалило за сутки, я решил уделить немного времени оптимизации — все-таки хотелось бы получить результат до того, как он потеряет актуальность. В рамках этой статьи я не планирую говорить о профилировании, а затрону тему компиляции Python-кода. При этом обозначу условие: варианты оптимизации не должны быть требовательными к времени разработчика, а, напротив, быть дружественными к «пыщ-пыщ и в продакшен».
Читать дальше →
Total votes 13: ↑11 and ↓2 +9
Comments 2

Встраивание PyPy кода в приложения на C

Reading time 3 min
Views 13K
Python *Programming *C *
Tutorial
Translation
Прим. переводчика:
Как правильно подсказали в комментариях, не смотря на название, речь в данной статье пойдет не о непосредственном встраивании кода, а о создании разделяемых библиотек на Python. Но так как это всего лишь перевод, я все же решил оставить название более близкое к оригиналу.



На конференции PyGrunn 2016 я выступил с докладом о пакете Python cffi и его использовании для встраивания PyPy кода в приложения на C.

С выходом cffi 1.5.0 и его последующим включением в PyPy 5, становится возможным встраивать PyPy код. Это делается путем компиляции кода Python в динамическую библиотеку, которая затем может быть использована в любом другом языке. В этой статье я покажу вам, как это делать.
Читать дальше →
Total votes 22: ↑20 and ↓2 +18
Comments 12

Как сделать ваш код в 80 раз быстрее

Reading time 6 min
Views 29K
OTUS corporate blog Python *Programming *
Translation
Всем бобра!

У нас стартует третий набор на курс «Разработчик Python», а значит, что впереди и открытый урок, которые у нас частично замещают староформатные дни открытых дверей и где можно ознакомиться с интересным материалом от наших преподавателей, и то, что мы нашли очередной интересный материальчик. На этот раз по ускорению «змеиного» кода.

Поехали.

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

ДИСКЛЕЙМЕР: это не чудодейственное средство на все случаи жизни, да, сработало конкретно в этом случае, но может оказаться не таким эффективным во многих других. Однако метод все равно интересный. Более того, шаги, описанные здесь, я применял во время разработки в том же порядке, что делает статью жизненным примером оптимизации PyPy.

Я экспериментировал с эволюционными алгоритмами несколько месяцев назад: план был амбициозным — автоматически развить логику, способную контролировать (симулированный) квадрокоптер, то есть PID-регулятор (спойлер: не летает).

Читать дальше →
Total votes 32: ↑29 and ↓3 +26
Comments 11

Python & оптимизация времени и памяти

Reading time 8 min
Views 19K
Python *Programming *Designing and refactoring *

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

Хотелось бы поделиться несколькими методами, которые помогают в реальных задачах.

Изучить статью
Total votes 14: ↑10 and ↓4 +6
Comments 6

Компиляция Python

Reading time 7 min
Views 58K
Цифровое проектирование corporate blog High performance *Python *Programming *Compilers *

Предположим, вы разработали приложение или библиотеку на Python и уже готовитесь передать его / её  заказчику. И в этот момент появляются разные вопросы.

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

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

И, наконец, хочется,  чтобы конечное приложение работало быстрее, чем в среде разработки.

И вот тут настало время скомпилировать Python-код.

Меня зовут Руслан, я старший разработчик компании «Цифровое проектирование». Сегодня я расскажу, как выбрать тот самый компилятор из множества доступных.

Читать далее
Total votes 10: ↑10 and ↓0 +10
Comments 21

Удивительное приключение в стране оптимизирующих компиляторов

Reading time 17 min
Views 24K
Python *Programming *C++ *Lisp *C *

Приглашаю вас в небольшое приключение выходного дня, в котором никто никому ничего не будет доказывать. Мы просто будем реализовывать один и тот же несложный алгоритм, разыскивающий простые числа в некотором диапазоне, на нескольких языках программирования: C, C++, Scheme и Python - и смотреть, что этим кодом могут сделать современные оптимизирующие компиляторы. В процессе приключения мы увидим, что «динамический» не означает «совсем уж медленный», и посмотрим на приёмы программирования на Scheme, что, как мне кажется, можно сравнить с путешествием на экзотический остров.

Читать далее
Total votes 66: ↑64 and ↓2 +62
Comments 82

Cling – не просто интерпретатор C++

Reading time 12 min
Views 5.1K
Издательский дом «Питер» corporate blog Python *Programming *C++ *API *
Translation

В этом посте будут рассмотрены некоторые продвинутые варианты применения Cling, поддерживающие интероперабельность и расширяемость. Здесь мы постараемся продемонстрировать создание экземпляров по запросу; встраивание Cling как услуги, а также похвастаемся расширением, обеспечивающим автоматическое дифференцирование на лету.

Читать далее
Total votes 11: ↑7 and ↓4 +3
Comments 1