Twisted из первых рук
Событийное и асинхронное программирование на Python
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
ДМК Пресс
Перевод:
Киселев Артём Николаевич
Год издания: 2020
Кол-во страниц: 338
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-795-4
Артикул: 748321.01.99
Доступ онлайн
В корзину
Эта книга посвящена Twisted - событийно-ориентированному сетевому фреймворку на Python, в котором можно создавать уникальные проекты. В первой части рассматриваются особенности Twisted; на практических примерах показано, как его архитектура способствует тестированию, решает общие проблемы надежности, отладки и упрощает выявление причинно-следственных связей, присущих событийно-ориентированному программированию. Детально описываются приемы асинхронного программирования, подчеркивается важность отложенного вызова функций и сопрограмм. На примере использования двух популярных приложений, treq и klein, демонстрируются сложности, возникающие при реализации веб-API с Twisted, и способы их преодоления. Вторая часть книги посвящена конкретным проектам, использующим Twisted. В число примеров входят использование Twisted с Docker, применение Twisted в роли контейнера WSGI, организация обмена файлами и многое другое.
Читатель должен иметь некоторый опыт работы с Python и понимать основы контейнеров и протоколов. Знакомство с Twisted и с проектами, описанными в книге, не требуется.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Моше Задка Марк Уильямс Джулиан Берман Том Мост www.дмк.рф из первых рук из первых рук Интернет-магазин: www.dmkpress.com Оптовая продажа: КТК “Галактика” books@alians-kniga.ru TWISTED из первых рук TWISTED из первых рук 9 785970 607954 ISBN 978-5-97060-795-4 TWISTED Twisted – событийно-ориентированный сетевой фреймворк на языке Python. Данная книга написана ведущими специалистами по Twisted, которые продемонстрируют, в чем состоит уникальность этого фреймворка, и ознакомят вас с проектами, в которые они лично внесли свой вклад. На практических примерах иллюстрируется, как архитектура Twisted способствует тестированию, решает общие проблемы надежности, отладки и упрощает выявление причинно-следственных связей. Описываются приемы асинхронного программирования и подчеркивается важность отложенного вызова функций и сопрограмм. Темы, рассматриваемые в книге: • способы интеграции Twisted и asyncio с применением адаптеров; • автоматизация процессов сборки, тестирования и выпуска программного обеспечения с Buildbot; • создание клиентов и серверов с использованием Autobahn; • передача файлов с помощью Magic Wormhole; • организация распределенного облачного хранилища файлов с Tahoe LAFS; • тонкости реализации и использования HTTP/2 в Python и Twisted; • поддержка асинхронных задач с использованием DjangoChannels. Для изучения представленного материала требуется некоторый опыт программирования на Python и понимание основ работы контейнеров и протоколов. Событийное и асинхронное Событийное и асинхронное программирование на Python программирование на Python
Моше Задка, Марк Уильямс, Кори Бенфилд, Брайан Уорнер, Дастин Митчелл, Кевин Сэмюэл, Пьер Тарди Twisted из первых рук
Moshe Zadka Mark Williams Cory Benfield Brian Warner Dustin Mitchell Kevin Samuel Pierre Tardy Expert Twisted Event-Driven and Asynchronous Programming with Python
Моше Задка Марк Уильямс Кори Бенфилд Брайан Уорнер Дастин Митчелл Кевин Сэмюэл Пьер Тарди Москва, 2020 Twisted из первых рук Событийное и асинхронное программирование на Python
УДК 004.438 ББК 32.973.22 З15 Задка М., Уильямс М., Бенфилд К., Уорнер Б., Митчелл Д., Сэмюэл К., Тарди П. З15 Twisted из первых рук / пер. с анг. А. Н. Киселева. – М.: ДМК Пресс, 2020. – 338 с.: ил. ISBN 978-5-97060-795-4 Эта книга посвящена Twisted – событийно-ориентированному сетевому фреймворку на Python, в котором можно создавать уникальные проекты. В первой части рассматриваются особенности Twisted; на практических примерах показано, как его архитектура способствует тестированию, решает общие проблемы надежности, отладки и упрощает выявление причинно-следственных связей, присущих событийно-ориентированному программированию. Детально описываются приемы асинхронного программирования, подчеркивается важность отложенного вызова функций и сопрограмм. На примере использования двух популярных приложений, treq и klein, демонстрируются сложности, возникающие при реализации веб-API с Twisted, и способы их преодоления. Вторая часть книги посвящена конкретным проектам, использующим Twisted. В число примеров входят использование Twisted с Docker, применение Twisted в роли контейнера WSGI, организация обмена файлами и многое другое. Читатель должен иметь некоторый опыт работы с Python и понимать основы контейнеров и протоколов. Знакомство с Twisted и с проектами, описанными в книге, не требуется. УДК 004.438 ББК 32.973.22 Authorized Russian translation of the English edition of Expert Twisted ISBN 978-1-48423741-0 © 2019 Moshe Zadka, Mark Williams, Cory Benfield, Brian Warner, Dustin Mitchell, Kevin Samuel, Pierre Tardy. This translation is published and sold by permission of Packt Publishing, which owns or controls all rights to publish and sell the same. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. ISBN 978-1-4842-3741-0 (анг.) © 2019 Moshe Zadka, Mark Williams, Cory Benfield, Brian Warner, Dustin Mitchell, Kevin Samuel, Pierre Tardy ISBN 978-5-97060-795-4 (рус.) © Оформление, издание, перевод, ДМК Пресс, 2020
Посвящается AZ, NZ и TS: Twisted добился признания, и мы с нетерпением ждем следующего поколения разработчиков. – Моше Задка (Moshe Zadka)
Содержание Об авторах ..........................................................................................................12 Благодарности ...................................................................................................14 Введение .............................................................................................................15 От издательства .................................................................................................16 Часть I. ОСНОВЫ ..............................................................................................17 Глава 1. Введение в событийно-ориентированное программирование с помощью Twisted .....................................................18 Примечание о версиях Python .............................................................................19 Событийно-ориентированное программирование – что это?..........................19 Многократные события ........................................................................................20 Мультиплексирование и демультиплексирование ............................................22 Мультиплексор select............................................................................................23 История, аналоги и назначение ......................................................................23 Сокеты и select ..................................................................................................24 События сокета – как, что и почему ................................................................25 Обработка событий ..........................................................................................26 Цикл обработки событий с select ....................................................................27 Управляемые событиями клиенты и серверы ................................................29 Неблокирующий ввод/вывод ...............................................................................31 Знаем, когда нужно остановиться ...................................................................31 Отслеживание состояния .................................................................................32 Наличие информации о состоянии усложняет программы ..........................35 Управление сложностью с помощью транспортов и протоколов .....................36 Реакторы: работа с транспортом .....................................................................37 Транспорты: работа с протоколами ....................................................................37 Игра в пинг-понг с протоколами и транспортами .........................................38 Клиенты и серверы со своими реализациями протоколов и транспортов ....42 Реакторы Twisted и протоколы с транспортами ............................................43 Преимущества событийно-ориентированного программирования ................44 Twisted и реальный мир .......................................................................................46 События и время ...................................................................................................50 Повторение событий с LoopingCall .................................................................53 Интерфейсы событий в zope.interface .................................................................55
Содержание 7 Управление потоком в событийно-ориентированных программах ................57 Управление потоком в Twisted с помощью производителей и потребителей .....................................................................................................58 Активные производители ................................................................................59 Потребители ......................................................................................................61 Пассивные производители ..............................................................................64 Итоги .....................................................................................................................64 Глава 2. Введение в асинхронное программирование с Twisted .........66 Обработчики событий и их композиция ............................................................66 Что такое асинхронное программирование? .....................................................69 Заполнители для будущих значений ...................................................................70 Асинхронная обработка исключений .................................................................72 Введение в Twisted Deferred .................................................................................76 Обычные обработчики .....................................................................................76 Ошибки и их обработчики ...............................................................................77 Композиция экземпляров Deferred .................................................................80 Генераторы и inlineCallbacks ...............................................................................83 yield ....................................................................................................................83 send ....................................................................................................................84 throw ..................................................................................................................86 Асинхронное программирование с inlineCallbacks .......................................87 Сопрограммы в Python .........................................................................................89 Сопрограммы с выражением yield from ..........................................................90 Сопрограммы async и await .............................................................................91 Ожидание завершения экземпляров Deferred ....................................................96 Преобразование сопрограмм в Deferred с помощью ensureDeferred ................97 Мультиплексирование объектов Deferred ...........................................................98 Тестирование объектов Deferred .......................................................................102 Итоги ...................................................................................................................105 Глава 3. Создание приложений с библиотеками treq и Klein ..............107 Насколько важную роль играют эти библиотеки? ............................................107 Агрегирование каналов ......................................................................................108 Введение в treq ....................................................................................................109 Введение в Klein ..................................................................................................112 Klein и Deferred ...............................................................................................113 Механизм шаблонов Plating в Klein ..............................................................115 Первая версия агрегатора каналов ....................................................................117 Разработка через тестирование с использованием Klein и treq ......................123 Выполнение тестов на устанавливаемом проекте .......................................123 Тестирование Klein с помощью StubTreq ......................................................126 Тестирование treq с помощью Klein ..............................................................133
Содержание Журналирование с использованием twisted.logger......................................136 Запуск приложений Twisted с помощью twist ..............................................141 Итоги ...................................................................................................................144 Часть II. ПРОЕКТЫ .........................................................................................146 Глава 4. Twisted в Docker ...............................................................................147 Введение в Docker ...............................................................................................147 Контейнеры .....................................................................................................147 Образы контейнеров ......................................................................................148 runc и containerd .............................................................................................149 Клиент .............................................................................................................149 Реестр ..............................................................................................................150 Сборка .............................................................................................................150 Многоступенчатая сборка ..............................................................................151 Python в Docker ...................................................................................................153 Варианты развертывания ..............................................................................153 В виртуальном окружении .............................................................................157 В формате Pex .................................................................................................159 Варианты сборки ............................................................................................160 Один большой образ .......................................................................................160 Копирование пакетов wheel между этапами ................................................161 Копирование окружения между этапами .....................................................161 Копирование файлов Pex между этапами .....................................................161 Автоматизация с использованием Dockerpy ................................................161 Twisted в Docker ..................................................................................................162 ENTRYPOINT и PID 1 .......................................................................................162 Пользовательские плагины ............................................................................162 NColony ............................................................................................................162 Итоги ...................................................................................................................165 Глава 5. Использование Twisted в роли сервера WSGI .........................166 Введение в WSGI .................................................................................................166 PEP ...................................................................................................................167 Простой пример ..............................................................................................168 Базовая реализация ........................................................................................170 Пример WebOb ................................................................................................172 Пример Pyramid ..............................................................................................173 Начало .................................................................................................................174 Сервер WSGI ....................................................................................................174 Поиск кода .......................................................................................................177 Путь по умолчанию ........................................................................................177 PYTHONPATH ..................................................................................................177
Содержание 9 setup.py ............................................................................................................177 Почему Twisted? ..............................................................................................178 Промышленная эксплуатация и разработка ................................................178 TLS ...................................................................................................................179 Индикация имени сервера .............................................................................180 Статические файлы ........................................................................................182 Модель ресурсов .............................................................................................182 Чисто статические ресурсы ............................................................................183 Комбинирование статических файлов с WSGI .............................................185 Встроенное планирование задач ...................................................................186 Каналы управления ........................................................................................189 Стратегии параллельного выполнения .............................................................191 Балансировка нагрузки ..................................................................................191 Открытие сокета в режиме совместного использования ............................192 Другие варианты ............................................................................................195 Динамическая конфигурация ............................................................................195 Приложение Pyramid с поддержкой A/B-тестирования ...............................195 Плагин для поддержки AMP ..........................................................................197 Управляющая программа ..............................................................................200 Итоги ...................................................................................................................201 Глава 6. Tahoe-LAFS: децентрализованная файловая система ...............................................................................................................202 Как работает Tahoe-LAFS ...................................................................................203 Архитектура системы .........................................................................................206 Как система Tahoe-LAFS использует Twisted ....................................................208 Часто встречающиеся проблемы .......................................................................208 Инструменты поддержки выполнения в режиме демона ...........................209 Внутренние интерфейсы FileNode ....................................................................210 Интеграция интерфейсных протоколов ...........................................................211 Веб-интерфейс ....................................................................................................212 Типы файлов, Content-Type, /named/ ............................................................214 Сохранение на диск ........................................................................................215 Заголовки Range..............................................................................................215 Преобразование ошибок на возвращающей стороне ..................................216 Отображение элементов пользовательского интерфейса: шаблоны Nevow ..............................................................................................217 Интерфейс FTP ....................................................................................................218 Интерфейс SFTP ..................................................................................................223 Обратная несовместимость Twisted API ...........................................................223 Итоги ...................................................................................................................226 Ссылки .................................................................................................................226
Содержание Глава 7. Magic Wormhole ................................................................................227 Как это выглядит.................................................................................................228 Как это работает .................................................................................................229 Сетевые протоколы, задержки передачи, совместимость клиентов ..............231 Сетевые протоколы и совместимость клиентов...........................................231 Архитектура сервера ..........................................................................................234 База данных ....................................................................................................235 Транзитный клиент: отменяемые отложенные операции ..............................235 Сервер транзитной ретрансляции .....................................................................238 Архитектура клиента ..........................................................................................239 Отложенные вычисления и конечные автоматы, одноразовый наблюдатель ........................................................................................................240 Одноразовые наблюдатели ................................................................................243 Promise/Future и Deferred ...................................................................................244 Отсроченные вызовы, синхронное тестирование ...........................................247 Асинхронное тестирование с объектами Deferred ...........................................248 Синхронное тестирование с объектами Deferred .............................................249 Синхронное тестирование и отсроченный вызов ........................................252 Итоги ...................................................................................................................254 Ссылки .................................................................................................................254 Глава 8. Передача данных в браузерах и микросервисах с использованием WebSocket ......................................................................255 Нужен ли протокол WebSocket? ........................................................................255 WebSocket и Twisted ............................................................................................256 WebSocket, из Python в Python ...........................................................................258 WebSocket, из Python в JavaScript ......................................................................261 Более мощная поддержка WebSocket в WAMP ..................................................263 Итоги ...................................................................................................................269 Глава 9. Создание приложений с asyncio и Twisted ...............................271 Основные понятия .............................................................................................271 Механизм обещаний ..........................................................................................272 Циклы событий ...............................................................................................273 Рекомендации .....................................................................................................274 Пример: прокси с aiohttp и treq .........................................................................277 Итоги ...................................................................................................................280 Глава 10. Buildbot и Twisted .........................................................................282 История появления Buildbot ..............................................................................282 Эволюция асинхронного выполнения кода на Python в Buildbot ...............283 Миграция синхронных API ............................................................................286 Этапы асинхронной сборки ...........................................................................287
Содержание 11 Код Buildbot .........................................................................................................287 Асинхронные утилиты ...................................................................................288 «Дребезг» .........................................................................................................288 Асинхронные службы .....................................................................................288 Кеш LRU ...........................................................................................................291 Отложенный вызов функций .........................................................................291 Взаимодействие с синхронным кодом .........................................................292 SQLAlchemy .....................................................................................................292 requests ............................................................................................................293 Docker ..............................................................................................................295 Конкурентный доступ к общим ресурсам ....................................................296 yield как барьер конкуренции ........................................................................296 Функции из пула потоков не должны изменять общее состояние .............297 Блокировки Deferred.......................................................................................298 Тестирование ..................................................................................................298 Имитации ............................................................................................................300 Итоги ...................................................................................................................300 Глава 11. Twisted и HTTP/2 ...........................................................................301 Введение ..............................................................................................................301 Цели и задачи......................................................................................................303 Бесшовная интеграция ...................................................................................303 Оптимизация поведения по умолчанию ......................................................304 Разделение задач и повторное использование кода ...................................305 Проблемы реализации .......................................................................................306 Что такое соединение? Ценность стандартных интерфейсов .....................306 Мультиплексирование и приоритеты ...........................................................309 Противодавление ...........................................................................................315 Противодавление в Twisted ...........................................................................317 Противодавление в HTTP/2............................................................................319 Текущее положение дел и возможность расширения в будущем ...................321 Итоги ...................................................................................................................322 Глава 12. Twisted и Django Channels ..........................................................323 Введение ..............................................................................................................323 Основные компоненты Channels ......................................................................325 Брокеры сообщений и очереди..........................................................................325 Распределенные многоуровневые системы в Twisted .....................................327 Текущее положение дел и возможность расширения в будущем ...................328 Итоги ...................................................................................................................329 Предметный указатель ..................................................................................330
Об авторах Марк Уильямс (Mark Williams) работает в Twisted. В eBay и PayPal Марк Уильямс работал над высокопроизводительными веб-службами Python (более миллиарда запросов в день!), над обеспечением безопасности приложений и информации, а также переносом корпоративных Python-библиотек на Python. Кори Бенфилд (Cory Benfield) – разработчик Python с открытым исходным кодом, активно участвует в сообществе Python HTTP. Входит в число основных разработчиков проектов Requests и urllib3 и является ведущим сопровождающим проекта Hyper – коллекции инструментов поддержки HTTP и HTTP/2 для Python, а также помогает в разработке Python Cryptographic Authority для PyOpenSSL. Брайан Уорнер (Brian Warner) – инженер по безопасности и разработчик программного обеспечения, работавший в Mozilla на Firefox Sync, Add-On SDK и Persona. Один из основателей проекта Tahoe-LAFS – распределенной и защищенной файловой системы, разрабатывает средства безопасного хранения и связи. Моше Задка (Moshe Zadka) с 1995 года является участником сообщества открытого исходного кода, свой первый вклад в Python внес в 1998 году, один из основателей открытого проекта Twisted. Любит рассказывать о Twisted и Python и выступать на конференциях. Регулярно ведет блоги. Дастин Митчелл (Dustin Mitchell) внес свой вклад в Buildbot. Является членом команды TaskCluster в Mozilla. Также работает в командах Release Engineering, Release Operations и Infrastructure. Кевин Сэмюэл (Kevin Samuel) начал заниматься разработкой и преподаванием еще во времена, когда появилась версия Python 2.4. Работал в Восточной Европе, Северной Америке, Азии и Западной Африке. Тесно сотрудничает с командой Crossbar.io и является активным членом французского сообщества Python.
О технических рецензентах Пьер Тарди (Pierre Tardy) – специалист по непрерывной интеграции в Renault Software Labs, в настоящее время является ведущим коммитером в Buildbot. Джулиан Берман (Julian Berman) – разработчик программного обеспечения с открытым исходным кодом из Нью-Йорка. Автор библиотеки jsonschema для Python, периодически вносит вклад в экосистему Twisted, активный участник сообщества Python. Шон Шоджи (Shawn Shojaie) живет в районе Калифорнийского залива, где работает инженером-программистом. Работал в Intel, NetApp. Сейчас работает в SimpleLegal, где создает веб-прило жения для юридических фирм. В будние дни занимается разработкой с использованием Django и PostgreSQL, а в выходные вносит вклад в проекты с открытым исходным кодом, такие как django-pylint, и время от времени пишет технические статьи. Больше можно узнать на сайте shawnshojaie.com. Том Мост (Tom Most) – Twisted-коммитер с десятилетним опытом разработки веб-служб, клиентских библиотек и приложений командной строки с использованием Twisted. Инженер-программист в телекоммуникационной отрасли. Сопровождает Afkak, клиента Twisted Kafka. Его адрес в интернете – freecog.net, а связаться можно по адресу twm@freecog.net.
Благодарности Благодарю свою жену Дженнифер Задка (Jennifer Zadka), без чьей поддержки я бы не справился. Благодарю своих родителей Якова и Пнине Задка (Yaacov and Pnina Zadka), которые хорошо меня учили. Благодарю своего советника Яэля Каршону (Yael Karshon) за то, что он научил меня писать. Благодарю Махмуда Хашеми (Mahmoud Hashemi) за вдохновение и поддержку. Благодарю Марка Уильямса (Mark Williams) за то, что всегда был рядом со мной. Благодарю Глифа Лефковица (Glyph Lefkowitz), который познакомил меня с Python, учил программировать и вообще быть хорошим человеком. – Моше Задка (Moshe Zadka) Благодарю Махмуда Хашеми (Mahmoud Hashemi) и Давида Карапетяна (David Karapetyan) за их отзывы. Благодарю Энни (Annie) за то, что была терпелива, пока я писал. – Марк Уильямс (Mark Williams)
Введение Twisted недавно отпраздновал свой шестнадцатый день рождения. За время своего существования он превратился в мощную библиотеку. За этот период на основе Twisted было создано несколько интересных приложений и многие из нас узнали много нового о том, как правильно использовать Twisted, как думать о сетевом коде и как создавать программы, основанные на событиях. После ознакомления с вводными материалами, которые есть на сайте Twisted, часто можно услышать: «И что делать дальше? Как я могу узнать больше о Twisted?» На этот вопрос мы обычно отвечали встречным вопросом: «А что вы хотите сделать с Twisted?» В этой книге мы покажем некоторые интересные приемы использования Twisted. Авторы данной книги использовали Twisted для разных целей и усвоили разные уроки. Мы рады представить все эти уроки, чтобы сообщество их знало и могло воспользоваться. Вперед!
Доступ онлайн
В корзину