Быстрые аналоги популярных библиотек для Python

в 14:02, , рубрики: atom, json, python, python3, хостинг

Так получилось, что несколько месяцев я пытался серьёзно использовать в качестве сервера, железку на ARM процессоре.
Об этом я писал тут и тут.
Производительности мне часто не хватало, и я находил и искал различные альтернативы, часто активно использующие C/C++. Парочка библиотек под катом.
Быстрые аналоги популярных библиотек для Python

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

JSON

Вот куда сейчас без него? Для веб приложений это по сути основной формат. Сервер должен уметь быстро преобразовывать python структуры в JSON и отдавать браузерам или устройствам. Наверное большинство делают import json и у них всё замечательно…
А вот если надо в разы быстрее тогда встречайте ujson. Порядки ускорения можно глянуть по ссылке, но на ARM по сути использование ujson позволило сократить время запроса с нескольких секунд до <1 секунды. Синтаксис ujson аналогичен обычному json хотя и отсутствуют некоторые атрибуты (к примеру у меня не вышло повесить свой обработчик для преобразования datetime). Так же ujson совместим с python3 и я ни разу не натыкался на его глюки.
Если у вас в JSON много текста не на английском языке то крайне выгодно использовать параметр ensure_ascii=False для функции dumps. Дело в том, что по умолчанию текст кодируется в JSON при помощи u нотации что приводит к 6-8 байтам на один символ, а так можно всё отдавать чисто в utf-8, что уменьшает отдаваемый JSON в 2 или 3 раза (даже если используется gzip).

FeedParser

Многие наверно использовали эту библиотеку для того что бы парсить RSS, ATOM и т.д. Её производительность и раньше меня напрягала, а теперь я вообще не мог ей нормально пользоваться, так как парсиниг одной RSS мог длится минуту. На помощь мне пришёл SpeedParser, он позволил сократить время разбора RSS до нескольких секунд. В целом по синтаксису он совместим с FeedParser но поведение сильно отличается. К примеру он не видит кастомные namespace или игнорит которых нету в его списке (который жёстко забит в либе). Для правки некоторых ошибок мы применили MonkeyPatching (увы).

GZIP

Нельзя использовать максимальные значения, а лучше крутиться вокруг коэффициента 5. Ниже уже на скорость начинает сильно влиять размер, а выше уже сильно замедляет формирование контента на отдачу.

Frameworks

Чем меньше оверхеда тем лучше. Не пытайтесь разворачивать крупные фреймворки, они работать будут но уже на паре другой человек всё встанет колом. Разница между Pylons и Tornado на пустой странице 3 раза.

Как то так.
Продолжение истории с чатом тут: habrahabr.ru/post/228703/.

ЗЫ в тексте много жаргонизмов, простите но мне так приятнее писать.
ЗЫ2 ошибок скорее всего так же много, пишите в личку если найдёте.

Автор: stalkerg

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js