Pull to refresh

Зачем нужен asyncio в Python?

Reading time 1 min
Views 1.5K
KTS corporate blog Python *Studying in IT

18-го октября в школе «Метакласс» от KTS начинается наш новый курс «Асинхронное программирование для начинающих».

В четверг, 30 сентября, в 19:00 пройдет второй открытый вебинар, где мы расскажем, зачем нужно асинхронное программирование:

— Что такое асинхронное программирование? 
— Зачем нужно АП? Какие типовые задачи решает?
— Зачем в синхронные фреймворки добавляют поддержку асинхронности?
— Почему Python, а не другие языки?
— Какие компании используют АП и для чего?

Вебинар проведут руководитель разработки и сооснователь KTS Александр Опрышко и разработчик Артем Бакулев. Всех, кто придет, в конце ждет традиционный сюрприз.

Чтобы записаться на вебинар, жмите сюда.

А можно чуть-чуть поподробнее?
Total votes 8: ↑8 and ↓0 +8
Comments 0

Пишем свой Google, или асинхронный краулер с rate limit’ами на Python

Reading time 1 min
Views 2.4K
KTS corporate blog Python *Studying in IT

В четверг, 7 октября, в 19:00 наш руководитель разработки и сооснователь KTS Александр Опрышко проведет открытый вебинар:

«Пишем свой Google, или асинхронный краулер с rate limit’ами на Python»

Зачем это нужно? Такая задача часто встречается на практике, когда нужно реализовать периодическую синхронизацию/обкачку между сервисами. Еще это просто интересно, потому что позволяет опробовать многие возможности asyncio.

Вот некоторые вещи, которые вы узнаете на вебинаре:

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

Вебинар прошел — чтобы посмотреть запись, переходите по ссылке.

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

Запуск курса по asyncio

Reading time 2 min
Views 2.5K
KTS corporate blog Python *Studying in IT

В понедельник, 18 октября, стартует новый курс школы Metaclass, посвященный asyncio. 

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

А в этот четверг, 14 октября, мы проведем вебинар про курс, на котором преподаватели ответят на вопросы по программе и разыграют бесплатное место на продвинутый трек курса.

Записаться на вебинар можно по ссылке, всех ждем!

Посмотреть, что будет на курсе
Total votes 12: ↑9 and ↓3 +6
Comments 0

Курс «Асинхронное программирование для начинающих»

Reading time 1 min
Views 4.3K
KTS corporate blog Python *Studying in IT

В понедельник, 20 декабря, стартует второй поток курса «Асинхронное программирование на Python для начинающих» от школы Metaclass

Курс подойдет тем, кто уже работает с Python в вебе или анализе данных, но хочет разобраться в asyncio, подтянуть теорию и попробовать ее на практике.

Курс состоит из 7 модулей с видеоуроками, заданий с автопроверкой, онлайн-разборами ДЗ и менторской поддержкой.

Также для всех участников курса мы подготовили выделенные виртуалки для каждого ДЗ: писать код можно будет прямо в браузере на нашей платформе — вы можете посмотреть демо.

Сегодня, 8 декабря в 19:00, мы проведем вебинар про курс, на котором преподаватели ответят на вопросы по программе и разыграют бесплатное место на продвинутый трек курса.

→ Записаться на вебинар можно по ссылке, всех ждем!

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

Курс по асинхронному программированию для начинающих, 3-й поток

Reading time 1 min
Views 2.5K
KTS corporate blog Python *Studying in IT

Привет!

11 апреля, через месяц, начинается 3-й поток нашего флагманского курса — «Асинхронное программирование на Python».

Что ждет вас на курсе:

— познакомитесь с теорией асинхронности
— узнаете, чем она отличается от параллельного выполнения потоков и процессов
— научитесь использовать асинхронный веб-фреймворк в Python
— начнете работать с БД через асинхронные коннекторы
— напишите чат-бота
— и даже разберетесь, как написать собственный event loop

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

Открытый livecode-вебинар по асинхронному программированию: «Сервер для геолокации»

Reading time 1 min
Views 674
KTS corporate blog Python *Studying in IT

Привет!

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

Ведущие — бэкенд-разработчик и преподаватель школы Metaclass Артём Бакулев и руководитель бэкенд-разработки KTS Александр Опрышко.

Этот вебинар — ознакомительное мероприятие перед началом 3-го потока курса «Асинхронное программирование на Python». 

Приходите, будем ждать!

👉 зарегистрироваться на вебинар

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

Асинхронное программирование на Python для джуниор-разработчиков, 4-й поток

Reading time 2 min
Views 1.7K
KTS corporate blog Python *Studying in IT

Привет!

3 октября начинается 3-й поток нашего флагманского курса — «Асинхронное программирование на Python».

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

В Python асинхронный подход реализуется через Asyncio, который мы рассматриваем в этом курсе. Каждый модуль — это полноценный проект, куда вы дописываете нужную функциональность. Дальше тесты автоматически проверяют взаимодействие всех компонентов проекта. Если ваше решение работает, вы успешно прошли модуль. 

Подключайтесь к ТГ-боту Слёрмику, и он поделится полезными материалами по теме. А ещё будет сообщать о наших бесплатных вебинарах. Там же вы в любой момент сможете купить курс.
Подключиться

Кстати о вебинарах: уже в этот четверг мы проведём первый из 2 вебинаров для погружения в тему, «Пишем Websocket-сервер для геолокации на asyncio»Зарегистрироваться

Что будет на курсе и кому подходит
Total votes 9: ↑8 and ↓1 +7
Comments 0

Асинхронное программирование на Python для джуниор-разработчиков

Reading time 1 min
Views 1.7K
Southbridge corporate blog

Как джуну выделиться на фоне таких же новичков и получить оффер в технологически развитую компанию?

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

Разобраться в АП можно на курсе «Асинхронное программирование на Python для джуниор-разработчиков» от нашего партнёра KTS.

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

Прокачаться в асинхронном программировании на Python за 6 недель

Reading time 1 min
Views 1K
Southbridge corporate blog

Через два дня стартует курс по асинхронному программированию на Python от нашего партнёра KTS. Его можно пройти за полтора месяца, если заниматься 8–16 часов в неделю.

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

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

Последовательный вызов асинхронных функций

Reading time 3 min
Views 32K
JavaScript *
Как известно, язык JavaScript преследует парадигму событийно-ориентированного программирования. Это, безусловно, хорошо, но что делать, если за одной асинхронной функцией должна вызываться другая асинхронная функция, а затем еще одна, и еще… Иногда такой код очень запутывает, и не только человека привыкшего к синхронному и поочередному вызову функций. Это касается сложных анимаций, таймаутов, аякса, когда за одним должно следовать другое, и так дальше.

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

UPD
image
Ниже моё решение, являющееся аналогом этой функции модуля async и кучи других подобных решений, представленных в комментариях. Спасибо всем комментирующим и sedictor в частности.
/UPD

Рассмотрим пример (который взят из головы и в нем возможны ошибки) гипотетического парсера сайта, который после парсинга заносит данные в БД, и, после занесения, вызывает некоторый код.

var html = '';
request.on('response', function (response) {

    response.on('data', function (chunk) {
        html = html + chunk;
    });

    response.on('end', function() {
        //какой-то парсер
        parse(html, function(data){  
                //какая-нибудь функция, добавляющая данные в базу
		addToDatabase(data, function() {  
			doSomething();
		})
	});

    });
});


Много вложенных колбеков — не есть гуд, пробуем по-другому.
Читать дальше →
Total votes 50: ↑40 and ↓10 +30
Comments 33

Асинхронность: назад в будущее

Reading time 22 min
Views 111K
C++ *

Асинхронность… Услышав это слово, у программистов начинают блестеть глаза, дыхание становится поверхностным, руки начинают трястись, голос — заикаться, мозг начинает рисовать многочисленные уровни абстракции… У менеджеров округляются глаза, звуки становятся нечленораздельными, руки сжимаются в кулаки, а голос переходит на обертона… Единственное, что их объединяет — это учащенный пульс. Только причины этого различны: программисты рвутся в бой, а менеджеры пытаются заглянуть в хрустальный шар и осознать риски, начинают судорожно придумывать причины увеличения сроков в разы… И уже потом, когда большая часть кода написана, программисты начинают осознавать и познавать всю горечь асинхронности, проводя бесконечные ночи в дебаггере, отчаянно пытаясь понять, что же все-таки происходит…

Именно такую картину рисует мое воспаленное воображение при слове “асинхронность”. Конечно, все это слишком эмоционально и не всегда правда. Ведь так?.. Возможны варианты. Некоторые скажут, что “при правильном подходе все будет работать хорошо”. Однако это можно сказать всегда и везде при всяком удобном и не удобном случае. Но лучше от этого не становится, баги не исправляются, а бессонница не проходит.

Так что же такое асинхронность? Почему она так привлекательна? А главное: что с ней не так?
Назад в будущее...
Total votes 130: ↑124 and ↓6 +118
Comments 42

О применении $.Deferred в работе с асинхронными задачами

Reading time 15 min
Views 21K
JavaScript *jQuery *
Sandbox
Привет всем!

В данной статье я хотел бы поделиться с вами соображениями о том, как на практике можно использовать механизм работы с асинхронными процессами, предоставляемый библиотекой jQuery с версии 1.5 под названием deferred, «отложенный» (jQuery.Deferred), а также со связанными объектами и методами.

Разумеется, уже написан не один десяток статей на тему работы с парой deferred/promise. Своей же я задался целью предоставить такой набор знаний, который дал бы новичку, во-первых, возможность забыть о своих страхах перед непонятным и сложным и, во-вторых, сделать еще один шаг к написанию понятного и хорошо структурированного кода, работающего с асинхронными процессами. Я бы хотел сосредоточить свое и ваше внимание на проблемах, которые легко разрешаются ипользованием deferred, на предпосылках и типовых схемах использования этого объекта.
Читать дальше →
Total votes 30: ↑28 and ↓2 +26
Comments 6

Нет никакого потока

Reading time 4 min
Views 40K
Website development *Programming *.NET *
Translation
Важная правда об асинхронности в своей первозданной форме: нет никакого потока.

Тех, кто возразит, несть числа. «Нет», кричат они, «если я ожидаю операцию, должен быть поток, в котором выполняется ожидание! Возможно это поток из пула. Или поток операционной системы! Или что-то, связанное с драйвером устройства...»

Не внемлем этим крикам. Если операция по-настоящему асинхронная, то никакого потока нет.

Скептики не убеждены. Высмеем же их.
Читать дальше →
Total votes 47: ↑40 and ↓7 +33
Comments 24

Асинхронность 2: телепортация сквозь порталы

Reading time 27 min
Views 48K
Яндекс corporate blog Programming *C++ *


Не прошло и года, как я добрался до продолжения статьи про асинхронность. Эта статья развивает идеи той, самой первой статьи про асинхронность [1]. В ней обсуждается достаточно сложная задача, на примере которой будет раскрыта мощь и гибкость использования сопрограмм в различных нетривиальных сценариях. В заключение будут рассмотрены две задачи на состояние гонки (race-condition), а также небольшой, но очень приятный бонус.
Читать дальше →
Total votes 63: ↑60 and ↓3 +57
Comments 28

Инфраструктура команд для вызова пользователем действий в шаблоне MVVM

Reading time 10 min
Views 10K
Programming *.NET *C# *
Представим типичный пользовательский интерфейс. Есть несколько элементов управления, которые запускают некоторые повторяемые (за время жизни приложения) действия разной сложности. Чтобы сложные действия, такие как обращение к различным носителям, обращение к сети или сложное вычисление, не снижали отзывчивость интерфейса, они должны быть асинхронными. Дополнительно могут быть элементы управления, отменяющие асинхронно запущенное действие. Действие имеет свойство состояния (неактивно, запущено, завершено успешно, завершено с ошибкой, отменено), которое тем или иным образом отображается пользователю. Принятый в WPF, Silverlight и WinPhone шаблон проектирования MVVM диктует, чтобы такое «действие» было частью модели представления, давая возможность вызывать сервисы модели из пользовательского интерфейса без создания между ними жёсткой связи. К сожалению, такое «действие» в базовой библиотеке классов не реализовано. Ближайшие имеющиеся в библиотеке сущности, такие как задачи System.Threading.Tasks.Task, команды System.Windows.Input.ICommand и делегаты System.Delegate, не подходят: задачи всегда одноразовые и не могут представлять повторяемое действие, делегаты и команды не поддерживают отмену и не содержат свойств состояния, а команды вообще не могут быть асинхронными. Далее я предлагаю решение в виде небольшой библиотеки классов, дающей возможность легко использовать описанные «действия» в ваших приложениях.
Читать дальше →
Total votes 18: ↑15 and ↓3 +12
Comments 11

Параллельная загрузка данных с временными ограничениями

Reading time 4 min
Views 4.2K
Programming *.NET *Algorithms *C# *
Tutorial
Бывают ситуации, когда необходимо получить данные из нескольких удалённых источников, но так, чтобы время ожидание было не слишком большим. Например, при загрузке данных о погоде или курсе валюты, мы можем опросить несколько сервисов и отобразить результаты всех ответивших за заданный промежуток времени.



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

Итого, мы оперируем тремя базовыми параметрами:
  • Приемлемым временем ожидания
  • Минимально необходимым количеством источников
  • Дополнительным временем ожидания

Читать дальше →
Total votes 15: ↑7 and ↓8 -1
Comments 0

Как мы строим систему обработки сообщений

Reading time 6 min
Views 14K
Website development *System Analysis and Design *Designing and refactoring *
Sandbox
Наша команда разрабатывает бекэнд-систему для обработки сообщений от мобильных устройств. Устройства собирают информацию о работе сложной техники и посылают сообщения в центр обработки. В этой статье я хочу поделиться подходами к построению подобных систем. Идеи достаточно общие, их можно применять для любой системы со следующей архитектурой:



По каналам связи устройства присылают сообщения на наш шлюз (gateway) – входную точку приложения. Задача приложения – разобраться, что именно пришло, произвести необходимые действия и сохранить информацию в базе данных для дальнейшего анализа. Базу мы будем рассматривать как конечную точку обработки. Звучит просто, но с ростом количества и разнообразия сообщений появляется несколько нюансов, которые я и хочу обсудить.
Читать дальше →
Total votes 22: ↑17 and ↓5 +12
Comments 16

Вышла asyncpg — клиентская библиотека PostgreSQL для Python/asyncio

Reading time 1 min
Views 10K
Python *PostgreSQL *
На конференции EuroPython 2016 Юрий Селиванов (автор async/await-синтаксиса и автор uvloop) представил новую высокопроизводительную библиотеку для асинхронного доступа к PostgreSQL — asyncpg. Тесты демонстрируют в среднем в два раза большую скорость, чем у psycopg2 (и её асинхронного варианта — aiopg).


Причина высоких показателей в том, что asyncpg реализует бинарный протокол PostgreSQL нативно, без использования абстракций, вроде DB-API. Кроме того, это позволило получить простую в использовании реализацию:


Читать дальше →
Rating 0
Comments 2

ГИС ЖКХ: асинхронная модель взаимодействия

Reading time 10 min
Views 14K
.NET *C# *Development for Windows *
Продолжаю делиться опытом по взаимодействию с ГИС ЖКХ. Следующей задачей, после установки защищенного соединения, стала организация обмена сообщениями. Разработчики ГИС ЖКХ предлагают две модели взаимодействия: синхронную и асинхронную. Некоторые разработчики выбирают синхронную модель из-за её простоты и доступности. В этой статье постараюсь объяснить, почему нужно использовать именно асинхронную модель и дать подсказки по реализации на C#.
Читать дальше →
Total votes 19: ↑19 and ↓0 +19
Comments 0

О метастабильности в электронике

Reading time 8 min
Views 14K
FPGA *Robotics development *
Многие начинающие разработчики часто недооценивают влияние асинхронности на работу цифровых схем. В проектах с одним тактовым генератором сложностей не возникает: схема полностью синхронна, и от разработчика требуется только соблюдать требования Setup и Hold. Но как только в системе появляется второй тактовый генератор, возникает проблема CDC – Clock Domains Crossing, связанная с асинхронностью работы участков схемы, работающих от независимых (асинхронных) генераторов. На практике эта проблема выливается в усложнение маршрута проектирования, связанное с особенностями статического временного анализа в САПР, а в железе проявляется в виде такого эффекта как метастабильность, и аномальное поведение триггеров. Собственно, о метастабильности здесь уже писали, но я предлагаю чуть глубже разобраться в проблеме.
Читать дальше →
Total votes 43: ↑43 and ↓0 +43
Comments 22