Skip to content

В этом репозитории пробую примеры из книг, а также делаю наброски кода по тематике concurrency and multiprocessing на Python.

hazadus/asyncio-learn

Repository files navigation

Concurrency and Multiprocessing in Python

В этом репозитории пробую примеры из книг, а также делаю эксперименты по тематике concurrency and multiprocessing на Python.

Наброски

Попытки эффективно решить прикладные задачи с помощью asyncio.

Разное

  • Скачиваем и сохраняем картинки с котами с использованием Thread, Process, asyncio: misc/cataas.py
  • Конкурентные запросы к web API с использованием Pool (процессы) vs. ThreadPool: misc/pool_vs_threadpool.py
  • Конкурентные запросы к web API с использованием ThreadPoolExecutor, ProcessPoolExecutor и concurrent.futures. as_completed(): misc/executors.py
  • Краулер на asyncio – ищет ссылки на страницах до установленной глубины, и сохраняет их в файл: misc/asyncrawler.py

Примеры к книге "Внутри CPython" Энтони Шоу

Примеры из глав 19-20 Fluent Python

Примеры кода из книги Python Concurrency with asyncio

Глава 1. Первое знакомство с asyncio

  • Процессы и потоки в простом Python-приложении: ch1/listing_1_2.py
  • Создание многопоточного Python-приложения: ch1/listing_1_3.py
  • Создание нескольких процессов: ch1/listing_1_4.py
  • Генерирование последовательности Фибоначчи и его хронометраж: ch1/listing_1_5.py
  • Многопоточное вычисление последовательности чисел Фибоначчи: ch1/listing_1_6.py
    • Многопроцессное вычисление последовательности чисел Фибоначчи (нет в книге): ch1/listing_1_6a.py
  • Синхронное чтение кода состояния: ch1/listing_1_7.py

Глава 2. Основы asyncio

Глава 3. Первое приложение asyncio

  • Запуск сервера и прослушивание порта для подключения: ch3/listing_3_1.py
  • Чтение данных из сокета: ch3/listing_3_2.py
  • Подключение нескольких клиентов: ch3/listing_3_3.py
  • Первая попытка создать неблокирующий сервер: ch3/listing_3_5.py
  • Перехват и игнорирование ошибок блокирующего ввода-вывода: ch3/listing_3_6.py
  • Использование селектора для построения неблокирующего сервера: ch3/listing_3_7.pyполнофункциональный эхо-сервер, поддерживающий нескольких клиентов. У него нет проблем с блокированием, поскольку чтение или запись производятся только тогда, когда имеются данные. Он почти не потребляет процессорного времени, так как мы пользуемся эффективной системой уведомления о событиях, которая реализована внутри операционной системы.
  • Построение асинхронного эхо-сервера: ch3/listing_3_8.py
  • Добавление обработчика сигнала, снимающего все задачи: ch3/listing_3_9.py
  • Корректная остановка: ch3/listing_3_10.py

Глава 4. Конкурентные веб-запросы

  • Асинхронный контекстный менеджер, ожидающий подключения клиента: ch4/listing_4_1.py
  • Отправка веб-запроса с помощью aiohttp: ch4/listing_4_2.py
  • Задание тайм-аутов в aiohttp: ch4/listing_4_3.py
  • Неправильное использование спискового включения для создания и ожидания задач: ch4/listing_4_4.py
  • Использование спискового включения для конкурентного выполнения задач: ch4/listing_4_5.py
  • Конкурентное выполнение запросов с помощью gather: ch4/listing_4_6.py
  • Обработка исключений при использовании gather: ch4/listing_4_6a.py
  • Использование as_completed: ch4/listing_4_8.py
  • Тайм-ауты в сочетании с as_completed: ch4/listing_4_9.py
  • Изучение поведения wait по умолчанию: ch4/listing_4_10.py
  • Обработка исключений при использовании wait: ch4/listing_4_11.py
  • Отмена работающих запросов при возникновении исключения: ch4/listing_4_12.py
  • Обработка запросов по мере завершения: ch4/listing_4_13.py
  • Обработка всех результатов по мере поступления: ch4/listing_4_14.py
  • Использование тайм-аутов в wait: ch4/listing_4_15.py

Глава 5. Неблокирующие драйверы баз данных

Запуск БД: docker compose up -d

В терминале контейнера, подключение к БД:

  • psql -U postgres -h localhost -p 5432

  • psql -d products -U postgres -h localhost -p 5432

  • Подключение к базе данных Postgres от имени пользователя по умолчанию: ch5/listing_5_1.py

  • Команды создания таблиц в схеме базы данных о товарах: ch5/listing_5_2.py

  • Использование сопрограммы execute для выполнения команд CREATE: ch5/listing_5_3.py

  • Вставка и выборка марок: ch5/listing_5_4.py

  • Вставка случайных марок: ch5/listing_5_5.py

  • Вставка случайных товаров и SKU: ch5/listing_5_6.py

  • Создание пула подключений и конкурентное выполнение запросов: ch5/listing_5_7.py

  • Синхронное и конкурентное выполнение запросов: ch5/listing_5_8.py

  • Создание транзакции: ch5/listing_5_9.py

  • Обработка ошибки в транзакции: ch5/listing_5_10.py

  • Вложенная транзакция: ch5/listing_5_11.py

  • Ручное управление транзакцией: ch5/listing_5_12.py

  • Простой асинхронный генератор: ch5/listing_5_14.py

  • Потоковая обработка результатов: ch5/listing_5_15.py

  • Перемещение по курсору и выборка записей: ch5/listing_5_16.py

  • Получение заданного числа элементов с помощью асинхронного генератора: ch5/listing_5_17.py

Глава 6. Счетные задачи

Глава 7. Решение проблем блокирования с помощью потоков

Глава 8. Потоки данных (streams)

  • Выполнение HTTP-запроса с помощью транспортного механизма и протокола: ch8/listing_8_1.py
  • Использование протокола: ch8/listing_8_2.py
  • Отправка HTTP-запроса с помощью потоковых писателей и читателей: ch8/listing_8_3.py
  • Попытка выполнения задач в фоновом режиме: ch8/listing_8_4.py
  • Асинхронный читатель стандартного ввода: ch8/listing_8_5.py
  • Использование потоковых читателей для ввода данных: ch8/listing_8_6.py
  • Вспомогательные функции для вывода управляющих последовательностей: ch8/listing_8_7.py
  • Чтение из стандартного ввода по одному символу: ch8/listing_8_8.py
  • Хранилище сообщений: ch8/listing_8_9.py
  • Приложение для асинхронной задержки: ch8/listing_8_10.py
  • Асинхронный командный SQL-клиент: ch8/listing_8_11.py
  • Создание эхо-сервера с помощью серверных объектов: ch8/listing_8_12.py
  • Чат-сервер: ch8/listing_8_13.py
  • Клиент чат-сервера: ch8/listing_8_14.py

Глава 9. Веб-приложения

Глава 10. Микросервисы

Глава 11. Синхронизация

Глава 12. Асинхронные очереди

Глава 13. Управление подпроцессами

Глава 14. Продвинутое использование asyncio

About

В этом репозитории пробую примеры из книг, а также делаю наброски кода по тематике concurrency and multiprocessing на Python.

Topics

Resources

Stars

Watchers

Forks

Languages