Все потоки
Поиск
Написать публикацию
Обновить
413.52

Python *

Высокоуровневый язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

19 способов сделать сокет-сервер на Python. Эволюционный подход. Часть 3. Первый подход к асинхронности

Время на прочтение11 мин
Количество просмотров14K

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

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

Но, к счастью, существует и третий вариант — кооперативная многозадачность с помощью системного вызова select и его аналогов (poll, epoll и других). Он позволяет мультеплексировать несколько задач в одном потоке выполнения и в сущности является обычной синхронной программой. А потому никаких дополнительных трат процессорного времени и времени разработчиков не требуется.

Читать далее

19 способов сделать сокет-сервер на Python. Эволюционный подход. Часть 2. Блокирующие сокеты и многозадачность

Время на прочтение13 мин
Количество просмотров19K

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

Читать далее

Автоматическое тестирование QT GUI с помощью python и funq

Время на прочтение5 мин
Количество просмотров12K

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

Читать далее

Бескомпромиссный CI-конвейер для питонистов

Время на прочтение11 мин
Количество просмотров7.7K

Любому Python-проекту может пойти на пользу надёжный и стабильный конвейер непрерывной интеграции (Continuous Integration, CI). В рамках таких конвейеров выполняется сборка приложений, запуск тестов, проверка кода линтерами, контроль качества программ, анализ уязвимости приложений. Правда, построение CI-конвейеров занимает много времени, требует выполнения действий, которые, сами по себе, никакой пользы не приносят. Этот материал написан для тех Python-программистов, которым нужен полнофункциональный, настраиваемый CI-конвейер, основанный на GitHub Actions. Этот конвейер оснащён всеми мыслимыми инструментами, подключён ко всем необходимым сервисам, а подготовить его к работе можно всего за несколько минут.

Читать далее

19 способов сделать сокет-сервер на Python. Эволюционный подход. Часть 1. Введение

Время на прочтение9 мин
Количество просмотров41K

Дабы исчерпать до дна тему сокетов в Python я решил изучить все возможные способы их использования в данном языке. Чтобы всех их можно было испытать и попробовать на зуб, были созданы 19 версий простого эхо-сервера: от примитивного использования класса socket до asyncio. Блокирующие и неблокирующие сокеты, процессы и потоки, select'ы и selector'ы, коллбеки и сопрограммы — все эти темы расположены в эволюционном порядке, чтобы один пример плавно перетекал в другой.

Отдельно разобрано появление асинхронности в Python. На примерах детально показано, как и зачем появились итераторы, из них — генераторы, сопрограммы. Ближе к концу построен учебный макет библиотеки asyncio с минимально необходимым кодом, чтобы любой (даже такой, как я) смог разобраться, как на самом деле устроена асинхронность, как там все внутри работает.

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

Читать далее

Обзор книги Аллена Б. Дауни «Think Python. Основы Python»

Время на прочтение5 мин
Количество просмотров17K

Написать хороший учебник по Python сложно. Пожалуй, сложнее, чем по любому другому языку программирования. Как ни странно, из-за того, что Python — универсальный, распространённый и очень простой язык. Но Аллену Дауни, профессору компьютерных наук, это, похоже, удалось.

В книге найдётся интересное упражнение для изучения любого аспекта языка Python. Если вы изучаете обязательный в таких случаях модуль turtle, то будете рисовать с помощью черепашки не просто какие-то скучные прямоугольники, а буквы алфавита и спираль Архимеда. А ещё — почему бы нам не нарисовать один из самых знаменитых фракталов — кривую Коха? Если вы знакомитесь с понятием функции, то вместо скучных вычислений попробуйте найти решение уравнения Великой теоремы Ферма.

Читать далее

Круглое катить, прямоугольное тащить. А шестигранник?

Время на прочтение6 мин
Количество просмотров5.3K


В большинстве случаев в DS предпочитают работать с прямоугольными данными и на то есть масса причин и обоснований. Очень популярна тема парсинга и развертывания вложенных json. Часто дают тестовые задания на приведение к прямоугольному виду.


Но далеко не все задачи сводятся к data.frame и не обязательно весь DS сводить к ML. Есть масса задач, оперирующих, например, с графами или их частным случаем — деревьями. Можно использовать библиотеку igraph или аналоги и не думать о деталях. А можно попробовать чуть заглянуть внутрь алгоритмов.


На примере одной задачки посмотрим на работу с деревьями с альтернативной колокольни.


Все предыдущие публикации.

Читать дальше →

Что такое выпас данных и почему он необходим?

Время на прочтение8 мин
Количество просмотров5.9K

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

Плохие данные приводят к принятию некачественных решений.

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

Вот тут-то и приходит на помощь выпас данных.

Читать далее

Как писать преобразователи данных в Sklearn

Время на прочтение7 мин
Количество просмотров11K

Сегодня разбираемся, как создавать собственные преобразователи Sklearn, позволяющие интегрировать практически любую функцию или преобразование данных в классы конвейера Sklearn. Подробности под катом к старту флагманского курса по Data Science.

Читать далее

GAN-модели для генерации набора данных из изображений

Время на прочтение6 мин
Количество просмотров5.1K

Привет, Хабр! Для машинного обучения в специфических областях очень остро стоит проблема нехватки данных для обучения.  Давайте рассмотрим один из способов генерировать изображения.

Читать далее

Оптимизация сервинга нейросетей

Время на прочтение10 мин
Количество просмотров4.7K

Я работаю ML-инженером в OK и последнее время занимался оптимизацией скорости инференса нейросетей, поэтому сегодня расскажу о них. И не просто о нейросетях, а о нейросетях в продакшене. 

Читать далее

Методика долгосрочной оценки эффекта целевого маркетинга

Время на прочтение7 мин
Количество просмотров3.6K

В последние годы компании с достаточной зрелостью процессов целевого маркетинга ставят перед собой задачу оценивать эффективность не отдельных кампаний, а всех кампаний в совокупности на продолжительном отрезке времени. Это связано с тем, что сети часто пытаются максимизировать выручку и прибыль лишь на горизонте действия целевой кампании, не учитывая, что может произойти каннибализация будущей выручки. Помимо этого, при активной контактной политике некоторые компании могут отправлять сразу несколько коммуникаций на клиента в один период времени. Если не учесть это при оценке кампаний, эффект будет дублироваться. В данной статье мы, команда Retail Solution компании GlowByte, планируем раскрыть основные сложности и особенности, с которыми придется столкнуться при разработке и внедрении методики оценки CRM на основе A/B-тестирования. Результаты получены нами на проекте с одним из ведущих ритейлеров страны.

Читать далее

Pet-проект для обучения или как я в одиночку писал Helpdesk

Время на прочтение6 мин
Количество просмотров29K

Ранее, у меня уже был опыт использования Helpdesk систем, но по разным причинам они не были внедрены у нас на предприятии. Хорошая возможность научится программировать, подумал я, и преступил к написанию собственного helpdesk’a.

Читать далее

Ближайшие события

Как я пагинацию на telebot делал (пагинация для telegram бота)

Время на прочтение13 мин
Количество просмотров20K

История о том, как мы пагинацию для бота делали.

Разберемся с начала, что это за статья зачем она и для кого. Пришлось мне в рамках хакатона "Поколение ИТ" писать бота для телеги.

Но готового решения для пагинации, которое бы нам подходило мы не нашли. Поэтому было принято решение изобретать велосипед. Решение моих товарищей было максимально странным, брать количество записей и перебирать их в цикле от 1 до N (конца, записей), но данная идея сразу была отброшена. Поэтому предоставляю вашему вниманию наше творчество, которое мы изобрели.

Читать далее

Как пакетно конвертировать изображения и видео в гифки с помощью FFmpeg минуя CLI

Время на прочтение6 мин
Количество просмотров5.2K

Привет, земляне. Многие из вас слышали про набор библиотек FFmpeg, а некоторые его активно используют. Я из их числа, но я не поклонник взаимодействия с приложением посредством текстовых команд, поэтому я предлагаю собственное приложение с графическим интерфейсом для взаимодействия с FFmpeg. Теперь, не нужно изучать текстовый интерфейс, чтобы произвести пакетное конвертирование изображений и видео в GIF-файлы высокого качества.

Пожалуйста, подробнее

Введение в извлечение сущностей из текста и NER

Время на прочтение3 мин
Количество просмотров11K

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

Читать далее

Простым языком о языковых моделях и цепи Маркова (Markov Chain)

Время на прочтение3 мин
Количество просмотров16K

N-граммы 

N-граммы – это статистические модели, которые предсказывают следующее слово после N-1 слов на основе вероятности их сочетания. Например, сочетание I want to в английском языке имеет высокую вероятностью, а want I to – низкую. Говоря простым языком, N-грамма – это последовательность n слов. Например, биграммы – это последовательности из двух слов (I want, want to, to, go, go to, to the…), триграммы – последовательности из трех слов (I want to, want to go, to go to…) и так далее.

Такие распределения вероятностей имеют широкое применение в машинном переводе, автоматической проверке орфографии, распознавании речи и умном вводе. Например, при распознавании речи, по сравнению с фразой eyes awe of an, последовательность I saw a van будет иметь большую вероятность. Во всех этих случаях мы подсчитываем вероятность следующего слова или последовательности слов. Такие подсчеты  называются языковыми моделями.

Как же рассчитать P(w)? Например, вероятность предложения P(I, found, two, pounds, in, the, library). Для этого нам понадобится цепное правило, которое определяется так:

Читать далее

Полковнику никто не пишет. Отправка писем по SMTP после изменения политики Google. С примером на Python

Время на прочтение2 мин
Количество просмотров24K

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

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

Читать далее

Papers, please! Как устроены сервисы по распознаванию лиц для идентификации клиента и проверки документов

Время на прочтение8 мин
Количество просмотров6.3K

В популярной в свое время игре Papers, please! игрок выполняет роль таможенника, проверяющего документы по все более усложняющимся правилам. Главная игровая механика - проверка документов на соответствие всем нормам, таким как верная дата и место выдачи, соответствие имени и фамилии человека на всех документах, срок действия визы, наличие человека в “черных” списках и тому подобное.

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

Читать далее

Обзор книги «Python. Экспресс-курс», отличная книга для начинающих с нуля

Время на прочтение4 мин
Количество просмотров12K

Всем доброго времени суток!

Публикую обзор книги "Python. Экспресс-курс" от автора Наоми Седера.

Стоит читать? Да! Почему? Опишу в статье.

Python - хороший первый язык программирования, а это отличная книга для его изучения с нуля.

Читать далее

Вклад авторов