Pull to refresh
4
0
Send message

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

Reading time8 min
Views8.6K

Как известно, если хочешь что-то понять, найди сначала тот начальный момент, из которого это что-то появилось. Зри в корень, как говорил Козьма Прутков. А найдя корень, проследи всю его эволюцию до настоящего времени. То, как она протекала, и почему именно таким образом. Хотя если понимать не обязательно, а нужно только делать, то можно и не разбираться.

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

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments1

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

Reading time11 min
Views12K

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

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

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

Читать далее
Total votes 14: ↑12 and ↓2+11
Comments4

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

Reading time13 min
Views17K

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

Читать далее
Total votes 8: ↑7 and ↓1+8
Comments1

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

Reading time9 min
Views38K

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

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

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

Читать далее
Total votes 19: ↑17 and ↓2+16
Comments5

Пишем свой фондовый индекс (API Тинькофф, FastApi, TradingView)

Reading time9 min
Views12K


Здравствуйте дорогие хабровчане, в этом посте я покажу, как написать свой биржевой индекс наподобие S&P 500 или Nasdaq.


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

Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments2

Как работают snap, flatpak, appimage

Reading time13 min
Views74K

Распространение приложений в линуксе - это боль. Причем в наше время цикл обновлений приложений все уменьшается и эта боль чувствуется все сильнее. В связи с этим появляются технологии вроде snap, flatpak, которые декларируют решение этих проблем. Некоторые дистрибутивы (я смотрю на тебя, Ubuntu) даже начинают довольно агрессивную политику по их внедрению. Однако, несмотря на то, что про сами эти технологии много говорят (и ещё больше жалуются), про то, как они работают написано довольно мало. Попробуем исправить это.

Disclaimer: в этой статье я не буду давать каких-то оценок, пытаться говорить что лучше. Только как это работает. Я предполагаю, что читатель знает что такое контейнеризация и как это примерно работает.

Читать далее
Total votes 52: ↑50 and ↓2+67
Comments64

Разработчик с мозгом груга

Reading time14 min
Views91K

Введение


это сборник мыслей о разработке программ собранный разработчиком с мозгом груга

разработчик с мозгом груга не очень умный, но разработчик с мозгом груга программирует много лет и научился кое чему, хоть всё равно часто запутывается

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

разработчиков с большим мозгом много, некоторым страница не понравится, скривят кислая рожа

Ещё больше-больше ДУМАЮТ, что они разработчики с большим мозгом и им она тоже не понравится

(груг раньше думал груг с большим мозгом, но потом всё понял)

это ладно!

груг надеется, что тебе понравится читать и может ты научишься на много-много ошибка груг совершил за длинную жизнь программиста
Читать дальше →
Total votes 223: ↑197 and ↓26+209
Comments81

Личный сервер shadowsocks за 10 минут без затрат

Reading time3 min
Views246K

Недавно я набрёл на интересное решение, которое позволяет развернуть личный сервер shadowsocks без каких-либо финансовых затрат. В результате получается некий аналог собственного VPN-сервера, с которым могут работать настольные компьютеры и мобильные устройства. Соединение с сервером shadowsocks защищено и устойчиво к фильтрации DPI.

Приятной особенностью такого метода развёртывания shadowsocks является то, что он не требует больших технических познаний. И настройка клиентов shadowsocks крайне проста: вся конфигурация происходит сканированием QR-кода или одной URL-строкой.

Читать далее
Total votes 14: ↑14 and ↓0+14
Comments64

Как оплачивать зарубежные сервисы?

Reading time5 min
Views205K

Как известно, 10 марта Visa и Mastercard официально прекратили транзакции в РФ. Наши соотечественники, срочно выехавшие или уже проживающие в других странах попали в ситуацию, когда российские карты перестали работать (с них нельзя снять наличные, ими нельзя расплатиться). Внутри России, будут работать до конца срока действия, благодаря Национальной системе платежных карт, но платить с использованием Apple Pay и Google Pay нельзя. Банки предлагают альтернативу: кобейджинговые карты МИР / UnionPay, но с ними все так просто и оформление таких карт - еще тот бег с препятствиями. Как итог, проблема с оплатой зарубежных сервисов стоит остро, мы уже привыкли к удобным и доступным сервисам и теперь очень не хочется отвыкать...

Как же теперь оплачивать зарубежные сервисы?

Читать далее
Total votes 60: ↑48 and ↓12+50
Comments215

Банки вводят штрафы за безналичный доллар: что делать с валютой, и стоит ли метнуться кабанчиком к иностранным брокерам

Reading time9 min
Views44K

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

Читать далее
Total votes 66: ↑59 and ↓7+72
Comments152

Telegram бот с языковой моделью, обученной на 2ch

Reading time3 min
Views43K

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

Читать далее
Total votes 36: ↑33 and ↓3+40
Comments23

Как отлаживать bash-script-ы по шагам или, возможно, самая короткая статья о программировании/отладке на Хабре

Reading time1 min
Views43K

Мне всегда хотелось иметь возможность отлаживать bash-scripts так же, как и любой другой код, т.е. по шагам, и bash такую возможность предусмотрел, но о ней не все знают. Несмотря на довольно большой опыт использования Linux, я дошёл до неё только недавно.

Читать далее
Total votes 158: ↑157 and ↓1+188
Comments37

Разбираемся с декораторами в Python

Reading time9 min
Views70K

Декораторы – это обертка вокруг функций (или классов) в Python, которая меняет способ работы этой функции. Декоратор абстрагирует свой собственный функционал. Нотация декоратора в целом наименее инвазивна. Разработчик может писать свой код так, как ему хочется, и использовать декораторы только для расширения функциональности. Все это звучит крайне абстрактно, поэтому давайте обратимся к примерам.

Читать далее
Total votes 22: ↑18 and ↓4+15
Comments11

Marshmallow vs. Pydantic: две лучшие библиотеки для сериализации и валидации данных на Python

Reading time10 min
Views40K

Сериализация и десериализация данных — это преобразование между необработанной структурой данных и экземплярами классов для их хранения и передачи. Например, преобразование объектов Python в JSON-представление. Мы рассмотрим две популярные Python-библиотеки Marshmallow и Pydantic, которые помогут нам справиться как с преобразованием, так и с валидацией данных. Сначала я представлю вам каждую библиотеку, используя небольшие примеры, а потом мы сравним их и разберем различия. Я также расскажу, чего вам стоит избегать при работе с обеими библиотеками.

Читать далее
Total votes 33: ↑33 and ↓0+33
Comments3

Знать небо

Reading time5 min
Views11K
Знать небо - рассказ-воспоминание - Андрей Климковский

Говорят, раньше люди были к звездам ближе. По звездам держали путь, по солнышку вставали и ложились, а оно — тоже звезда. Звезды помогали узнать время сева, и когда жать. Когда придет сезон дождей, и сколько осталось до засухи.

Подобные суждения имеют отношение к реальности, но они сильно преувеличены. Конечно, звездное небо имело для людей огромный смысл, и прежде всего сакральный. Сияние звезд пробуждало в них самые высокие и тонкие чувства. Небо говорило людям, что истинные размеры Мира, в котором они живут, гораздо шире их восприятия, и им — людям — всегда есть к чему стремиться.

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

Что удивительно, с ними никто не мог спорить. Даже фараоны. Жрецы в древнем Египте легко меняли фараонов, если так сходились звезды. Но — как сходились звезды? — знали только они.

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

А ведь, могло…

Total votes 49: ↑47 and ↓2+64
Comments46

О неоправданно хорошей работе [ -z $var ]

Reading time3 min
Views8.8K
Есть такой сабреддит — /r/nononoyes, где публикуют видео, в которых происходит что-то такое, что, на первый взгляд, кажется ужасно неправильным, идущим к катастрофе. Но в конце всё, чудесным образом, заканчивается хорошо.

В том сабреддите хорошо смотрелась бы команда [ -z $var ].


Читать дальше →
Total votes 38: ↑32 and ↓6+37
Comments21

Пройти до конца: почему бросать и снова начинать учиться — это нормально

Reading time10 min
Views14K

Многие из нас начинают и бросают много самых разных дел. В этом плане онлайн-обучение — не исключение, а один из самых частых примеров. По данным исследования, проведённого в России в 2020 году, только у 28 % онлайн-школ до конца курса доходят 70 % учеников и более. В мире в целом “доходимость” два-три года назад ещё ниже: в среднем курс заканчивали только 3 % из тех, кто его начал, причём показатель с годами падал всё сильнее.  В этом материале специалисты SkillFactory расскажут о самых частых причинах остановки учёбы, какой период обучения самый сложный в плане срывов, а также как они работают со всем этим.

Читать далее
Total votes 12: ↑11 and ↓1+12
Comments7

Интервью авторов «Искусства схемотехники» сообществу «element14» (05.06.2015)

Reading time17 min
Views17K

После своей первоначальной публикации в 1980 году, книга «Искусство схемотехники» считается «Библией электронной техники». Инженеры отзываются о ней как о важной, основополагающей книге, которая сформировала их профессиональное мировоззрение и привила любовь к схемотехнике. Весьма ожидаемое третье издание книги было опубликовано ранее в этом году и уже получило восхищенные отзывы.

Сагар Джетани (Sagar Jethani) беседует от имени сообщества «element14» с соавторами книги, Полом Хоровицем (Paul Horowitz) и Уинфилдом Хиллом (Winfield Hill), о новом третьем издании.

Читать далее
Total votes 16: ↑16 and ↓0+16
Comments14

Information

Rating
Does not participate
Registered
Activity