Быстродействующий Python. Высокопроизводительные методы для больших наборов данных
Copyright © 2023 Manning Publications Co.
![]() |
Данный документ предоставляется по лицензии Creative Commons Attribution 4.0 License, за исключением разделов со специальными оговорками. |
Первая редакция на английском языке: Апрель 2023
Никакая часть этой книги не может быть воспроизведена, сохранена в какой- то системе извлечения или передачи в любом виде или посредством электронного, механического, фотографического или иного способа без получения первичного письменного разрешения публикующей стороны.
Многие из обозначений, используемых производителями и продавцами для их различения продуктов, считаются товарными знаками. В тех случаях, когда эти обозначения фигурируют в книге, и Manning Publications была осведомлена о заявке на товарный знак, обозначения были напечатаны в первоначальных заглавных буквах либо всем заглавием.
Опубликовано Manning Publications Co.
20 Baldwin Road
PO Box 761
Shelter Island, NY 11964
ISBN 978-1-61729-793-9
2023-06-16
- Автор
- Тиаго Родригес Антан
- Редактор по аудитории
- Фрэнсис Лефковиц
- Редактор технического развития
- Эл Кринкер
- Редактор обзора
- Михаэла Батинич
- Редактор производства
- Энди Маринкович
- Редактор текста
- Алиса Ларсон
- Корректор
- Кери Хейлз
- Технический корректор
- Энди Майлз
- Наборщик
- Гордан Салинович
- Изготовитель переплёта
- Мария Тудор
Тип | Размер | Время доступа |
---|---|---|
|
||
|
256кБ |
2нс |
|
1МБ |
5нс |
|
6МБ |
30нс |
|
||
|
8ГБ |
100нс |
|
||
|
256ГБ |
500мкс |
|
2ТБ |
5мс |
|
||
|
100ТБ |
Определяется сетевой средой |
|
1ПБ |
Определяется поставщиком услуги |
- Вводная часть
- Часть 1: Основные подходы
- Глава 1. Острая потребность в эффективности обработки данных
- Глава 2. Извлекаем максимальную производительность из встроенных функциональных возможностей
- Глава 3. Одновременность, параллельность и асинхронная обработка
- Глава 4. Высокопроизводительный NumPy
- Часть 2: Аппаратные средства
- Глава 5. Повторная реализация критически важного кода при помощи Cython
- Глава 6. Иерархия памяти, хранение и сетевые среды
- Часть 3: Приложения и библиотеки для современной обработки данных
- Глава 7. Высокопроизводительные pandas и Apache Arrow
- Глава 8. Хранение Больших данных
- Часть 4: Современные темы
- Глава 9. Анализ данных при помощи GPU
- Понимание вычислительной мощности графического процессора
- Применение Numba для выработки кода GPU
- Анализ производительности кода GPU: вариант приложения CuPy
- Библиотеки анализа данных на основе графического процессора
- Применение CuPy: версия NumPy графического процессора
- Базовое взаимодействие с CuPy
- Написание генератора Мандельброта с применением Numba
- Написание генератора Мандельброта с применением CUDA C
- Инструменты профилирования для кода графического процессора
- Глава 10. Анализ Больших данных с применением Dask
- Дополнение A. Настройка среды
- Дополнение B. Применение Numba для выработки действенного кода нижнего уровня
- Указатель
Несколько лет назад конвейер на основе Python, над которым работала моя команда, внезапно остановился. Процесс просто продолжал использовать ЦПУ и не завершался. Эта функция была критически важной для нашей компании, и нам нужно было решить проблему как можно скорее. Мы посмотрели на алгоритм, и он показался нам нормальным — на самом деле это была достаточно простая реализация. После многих часов изучения возникшей проблемы несколькими инженерами, мы обнаружили, что всё сводилось к поиску по списку — очень большому списку. Основная проблема решилась тривиально после преобразования такого списка на набор. В итоге мы получили гораздо меньшую структуру данных со временем поиска в миллисекундах, а не в часах.
На тот момент меня посетил ряд прозрений:
-
Это была тривиальная задача, однако наш процесс разработки не касался проблем производительности. К примеру, если бы мы регулярно применяли средство профилирования, мы бы выявили эту ошибку производительности за считанные минуты вместо затраченных часов.
-
Это была беспроигрышная ситуация: в итоге мы потребляли меньше времени и меньше памяти. Да, во многих ситуациях приходится идти на компромиссы, но в прочих имеются действительно эффективные результаты без недостатков.
-
В более широком плане, данная ситуация также была беспроигрышной. Прежде всего, более быстрые результаты оказывают положительное воздействие на прибыль компании. Во- вторых, хороший алгоритм применяет меньше процессорного времени, а значит меньше электроэнергии, а использование меньшего объёма электроэнергии (то ест ресурсов) лучше для всей планеты.
-
Хотя отдельный случай не сбережёт много электроэнергии, я осознал что подобные решения разрабатывает много программистов.
Я решил написать данную книгу чтобы и другие программисты могли получить пользу от моих озарений. Моя цель состоит в том, чтобы оказать содействие опытным программистам Python разрабатывать и реализовывать более действенные решения, а также разбираться в возможных компромиссах. Я хотел применить к своему предмету целостный подход, обсуждая чистый Python и важные библиотеки Python, рассматривая перспективы алгоритмов и принимая во внимание современные аппаратные архитектуры и их последствия, а также обсуждая производительность ЦПУ и средств хранения. Я надеюсь, что данная книга окажет вам содействие в более уверенном подходе к вопросам производительности при разработке экосистем Python.
Я бы хотел поблагодарить редактора по развитию Фрэнсис Лефковиц за её бесконечное терпение. Также я бы хотел выразить признательность своим дочери и жене, которым пришлось терпеть моё отсутствие на протяжении последних нескольких лет, пока я писал данную книгу. Также спасибо всей производственной команде Manning, которая помогла создать данную книгу.
Всем рецензентам: Абхилашу Бабу Джотиндре Бабу, Андреа Смит, Бисванат Чоудхури, Брайану Гринеру, Брайану С. Коулу, Дэну Шейху, Дане Робинсон, Даниэлю Васкесу, Дэвиду Паккуду, Дэвиду Пачке, Гжегожу Мике, Джеймсу Лю, Йенсу Кристиану Б. Мэдсену, Джереми Чен, Кальян Редди, Лоренцо Де Леон, Ману Сарина, Ник Пипенбрейер, Ноа Флинн, Ор Голан, Пауло Нуин, Пега Т. Афшар, Ричард Вон, Рууд Гийсен, Шашанк Каланити, Симеон Лейзерзон, Симоне Сгуацца, Шрирам Мачарла, Шрути Шивакумар , Стив Лав, Уолтер Александр Мата Лопес, Уильям Джамир Сильва и Се Икуан — ваши предложения помогли сделать эту книгу лучше.
Основная цель данной книги состоит в оказании вам помощи для написания более эффективных приложений в экосистеме Python. Под более эффективным я подразумеваю, что ваш код будет пользоваться меньшим числом тактов ЦПУ, меньшим объёмом для хранения и и меньшим сетевым взаимодействием.
Книга применяет целостный подход к задаче производительности. Мы не только обсуждаем методы оптимизации кода на чистом Python, но также рассматриваем действенное использование широко распространённых библиотек по работе с данными, таких как NumPy и pandas. Поскольку в некоторых ситуациях Python недостаточно эффективен, мы также рассматриваем Cython, когда нам требуется бо́льшая скорость. В соответствии со своим целостным подходом, мы также обсуждаем влияние аппаратных средств на проектирование кода: мы анализируем влияние современных вычислительных архитектур на производительность алгоритмов. Также мы изучаем воздействие сетевых архитектур на эффективность и изучаем применение вычислений графического процессора для быстрого анализа данных.
{Прим. пер.: Следует обратить внимание на не совсем традиционное применение автором терминов concurrency и parallelism. Под concurrency в данной книге понимается параллельность, не обязательно одновременная, а parallelism подразумевает именно одновременность.}
Данная книга предназначена для аудитории от средней до продвинутой компетентности. Если вы просмотрите оглавление, вы должны узнать большинство приводимых методик и, скорее всего, вы применяли многие из них. За исключением посвящённых библиотекам ввода/ вывода и вычислениям в графических процессорах разделов, здесь представлено мало сведений вводного характера: вам требуется понимать эти основы. Если вы в настоящее время пишите код с расчётом на его производительность и сталкиваетесь с реальными трудностями при действенной обработке столь большого объёма данных, тогда эта книга для вас.
Для извлечения максимальной пользы от данной книги вам требуется обладать, как минимум, парой лет работы с Python и быть знакомым с управляющим структурами Python, а также понимать что такое списки, наборы и словари. Также вам потребуется опыт работы с некоторыми стандартными библиотеками Python, такими как os, sys, pickle и multiprocessing. Чтобы максимально действенно пользоваться представляемыми мной здесь методами, вы также должны иметь некий уровень знакомства со стандартными библиотеками анализа данных, такими как NumPy - по крайней мере, минимальное знакомство с массивами - и pandas - при некотором опыте работы с кадрами данных.
Оказалось бы полезным, даже если вы напрямую не контактировали с ними, если бы вы были знакомы с путями ускорения кода Python через взаимодействие с внешними языками программирования для C или Rust или бы вам было известно об альтернативных подходах, таких как Cython или Numba. Вам также поможет опыт работы с вводом/ выводом в Python. Учитывая то, что библиотеки ввода/ вывода менее рассмотрены в имеющейся литературе, мы начнём с самого начала таких форматов как Apache Parquet и таких библиотек, как Zarr.
Вам надлежит знать основные команды оболочки терминалов Linux (или терминалов MacOS). Если вы работаете в Windows, установите либо оболочку на основе Unix, либо разберитесь с командной строкой или PowerShell. И, конечно же, на вашем компьютере должно быть установлено программное обеспечение Python.
В некоторых ситуациях я буду давать советы по облачным решениям, однако доступ к облачным решениям или знания о них не является обязательными для прочтения данной книги. Если вас интересуют облачные подходы, вам должно быть известно как осуществлять основные операции, такие как создание экземпляров и доступ к хранилищу вашего поставщика облачного решения.
Хотя вам и не требуется обладать академической подготовкой в данной области, вам будет полезно иметь базовое представление об издержках сложности - к примеру, интуитивное представление о том, что масштабируемые линейно с данными алгоритмы лучше чем алгоритмы, стоимость которых растёт экспоненциально. Если вы планируете применять оптимизацию графическим процессором, на данном этапе мы ничего от вас не ожидаем.
Все главы данной книги по большей части независимы и вы можете перепрыгивать на ту главу, которая важна для вас. При этом данная книга разделена на четыре части.
- Часть 1: Основные подходы (Главы 1-4) рассматривает вводный материал.
Глава 1. Острая потребность в эффективности обработки данных представляет основную задачу и поясняет почему мы должны уделять внимание действенности при вычислениях и хранении. Она также вводит основной подход данной книги и делает предложения для навигации по ней исходя из ваших потребностей.
Глава 2. Извлекаем максимальную производительность из встроенных функциональных возможностей охватывает оптимизацию в естественном Python. Также мы обсуждаем оптимизацию структур данных Python, профилирование кода, выделение памяти и технологии отложенного программирования.
Глава 3. Одновременность, параллельность и асинхронная обработка обсуждает одновременность и параллельность в Python, а также лучше применять множество процессов и многопоточность (в том числе ограничения одновременной обработки при использовании многопоточности). Данная глава также рассматривает асинхронную обработку в качестве действенного способа работы со множеством параллельных запросов при низких рабочих нагрузках, что типично для веб серверов.
Глава 4. Высокопроизводительный NumPy вводит NumPy, библиотеку, которая позволяет вам действенно обрабатывать многомерные массивы. NumPy стоит в самой сердцевине всех современных методик обработки данных, а раз так, она трактуется в качестве фундаментальной библиотеки. Данная глава распределяет методики numPy для разработки более действенного кода, такие как представления, широковещание и программирование массивов. - Часть 2: Аппаратные средства (Главы 5 и 6) по большей части сосредоточена на выделении максимальной эффективности из распространённых аппаратных ресурсов и сетевых сред.
Глава 5. Повторная реализация критически важного кода при помощи Cython рассматривает Cython, расширенный набор Python, который способен вырабатывать очень эффективный код. Python представляет собой интерпретируемый язык программирования верхнего уровня, поэтому ожидается, что он не будет оптимальным для аппаратных средств. Имеется ряд языков программирования, таких как C или Rust, которые спроектированы таким образом, чьътобы быть максимально эффективными на аппаратном уровне. Cython относится к такой области языков программирования. Хотя он очень близок к Python, он компилируется в код C. Для создания наиболее действенного кода нс Cython необходимо помнить о том, как его код соотносится с действенной реализацией. В данной главе мы ознакомимся с тем как создавать эффективный код Cython.
Глава 6. Иерархия памяти, хранение и сетевые среды обсуждает влияние современных аппаратных архитектур на разработку действенного кода Python. Учитывая то, как устроены современные компьютеры, некоторые парадоксальные подходы могут оказаться более эффективными чем ожидалось. Например, при некоторых обстоятельствах работа со сжатыми данными может оказываться быстрее работы с несжатыми данными, даже если за это придётся платить некую цену алгоритму распаковки. В этой главе также рассматривается влияние ЦПУ, памяти, системы хранения и сетевой среды на разработку алгоритма Python. Мы обсудим NumExpr, библиотеку, которая способна превратить код NumPy в более эффективный за счёт применения свойств современной архитектуры оборудования.
- Часть 3: Приложения и библиотеки для современной обработки данных (Главы 7 и 8) бросает взгляд на типичные приложения и библиотеки, применяемые в современной обработке данных.
Глава 7. Высокопроизводительные pandas и Apache Arrow сосредотачивается на настолько эффективном, насколько это возможно, применении pandas, используемой в Python библиотеке кадров данных. Мы рассмотрим относящиеся к pandas методики оптимизации кода. В отличии от большинства глав данной книги, ото строится на более ранних главах. pandas работает поверх NumPy, а потому мы воспользуемся тем, что узнали в Главе 4, и познакомимся со связанными с NumPy методами для оптимизации pandas. Также мы рассмотрим как выполнять оптимизацию pandas при помощи NumExpr и Cython. Наконец, я представляю Arrow, библиотеку, которую, помимо прочих функциональных возможностей, можно применять для повышения производительности обработки кадров данных pandas.
Глава 8. Хранение Больших данных рассматривает оптимизацию хранения данных. Мы обсудим Parquet, библиотеку для эффективной обраьотки данных столбцов и Zarr, которая способна обрабатывать очень большие массивы на диске. Мы также приступаем к обсуждению того, как работать с наборами данных, размеры которых превышают размер памяти.
- Часть 4: Современные темы имеет дело с двумя завершающими и очень различными подходами: работу с графическим процессором и применение библиотеки Dask.
Глава 9. Анализ данных при помощи GPU рассматривает применении графических процессоров (GPU) для обработки больших наборов данных. Мы обнаружим, что модель вычислений на графических процессорах, применяющих множество простых процессорных устройств, вполне годится для решения современных задач науки о данных. Для того чтобы воспользоваться преимуществами графических процессоров мы пользуемся двумя различными подходами. Во- первых, мы обсудим имеющиеся библиотеки, которые предоставляют аналогичные знакомые вам библиотекам интерфейсы, к примеру, CuPy как версию NumPy для графического процессора. Во- вторых, мы расскажем как вырабатывать код для работы на графических процессорах из Python.
Глава 10. Анализ Больших данных с применением Dask обсуждает Dask, библиотеку, позволяющую писать одновременный код, который масштабируется на большое число компьютеров -локально или в облачном решении - и при этом представляет знакомые интерфейсы, схожие с NumPy и pandas.
- Данная книга также содержит два Дополнения.
Дополнение A. Настройка среды проведёт вас по установке необходимого для применения примеров из этой книги программного обеспечения.
Дополнение B. Применение Numba для выработки действенного кода нижнего уровня обсуждает Numba, альтернативу Cython для создания эффективного кода нижнего уровня. Cython и Numba — основные средства генерации низкоуровневого кода. Для решения реальных проблем я рекомендую Numba. Почему же тогда я посвятил Cython целую главу и поместил Numba в конец книги? Потому что основная цель этой книги — дать вам прочную основу для написания эффективного кода в экосистеме Python, а Cython с его дополнительными препятствиями позволяет нам копнуть глубже с точки зрения понимания того, что происходит.
Данная книга содержит большое число примеров исходного кода как в листингах с пронумерованными строками так и в обычном тексте. В обоих случаях исходный код
отформатирован отформатирован подобно данному, шрифтом фиксированной ширины
для его отделения от простого текста. Порой код
также выделен жирно
для подчёркивания кода, который был изменён по сравнению с предыдущими
шагами этой главы, например, в случае добавления новых функциональных возможностей в уже имеющиеся строки кода.
Во многих ситуациях первоначальный исходный код был отформатирован; мы добавили разрывы строк и переработали отступы чтобы подладиться под доступное пространство страниц в этой книге. В редких случаях, даже этого оказывалось недостаточно, и листинги содержат пометки продолжения строк (➥). Кроме того, зачастую комментарии удалялись из исходного кода когда сам код описывался в тексте. Примечания к коду сопровождают многие листинги, выделяя важные понятия.
Вы можете получить исполняемые фрагменты кода из liveBook (через Интернет) версии данной книги. Полный код примеров доступен для загрузки с GitHub и с вебсайта Manning. Если будут выявляться ошибки или когда основные разработки Python и имеющихся библиотек потребуют некоторых изменений, я буду обновлять этот репозиторий. Поэтому ожидайте неких изменений в данном репозитории книги. Вы обнаружите в данном репозитории каталог для каждой главы.
Какой бы стиль кода вы ни предпочли, я адаптировал приводимый здесь код с тем, чтобы он хорошо служил в печатной книге. Например, я неравнодушен к длинным и содержательным именам переменных, но они плохо сочетаются с ограничениями книжной формы. Я стараюсь применять выразительные имена и следовать стандартным соглашениям Python, таким как PEP8, но приоритет имеет удобочитаемость книги. То же самое относится и к типам аннотациям: я бы хотел ими пользоваться, но они мешают читабельности кода. В некоторых, очень редких случаях, я для повышения удобочитаемости пользуюсь алгоритмом, даже если он не работает со всеми предельными ситуациями и не добавляет многого к объяснению.
В большинстве случаев код из данной книги будет работать со стандартным интерпретатором Python. В некоторых ограниченных ситуациях потребуется IPython, в особенности, для сопровождения анализа производительности. Также вы можете пользоваться Jupyter Notebook.
Подробности установки можно обнаружить в Дополнении A. Настройка среды. Когда какие- то из глав или разделов требуют особенного программного обеспечения, это будет обозначено в соответствующем месте.
Приобретение Fast Python также включает в себя доступ к liveBook, Интернет платформе Manning для чтения. Пользуясь исключительными функциональными возможностями обсуждения liveBook вы можете присоединять комментарии к общей книге или же к отдельным разделам либо параграфам. Вы можете запросто делать заметки для себя, задавать технические вопросы и отвечать на них, а также получать помощь от автора и прочих пользователей. Для получения доступа к форуму перейдите по ссылке. О форумах Manning и правилах поведения вы можете дополнительно в https://livebook.manning.com/discussion.
Обязательство Manning перед нашими читателями состоит в том, чтобы предоставлять место, где может состояться содержательный диалог между отдельными читателями, а также между читателями и автором. Это не обязательство какой-либо конкретной суммы участия со стороны автора, чей вклад в форум остаётся добровольным (и неоплачиваемым). Мы предлагаем вам попробовать задать автору несколько сложных вопросов, чтобы он не потерял интерес! Форум и архивы предыдущих обсуждений будут доступны на веб-сайте издателя, пока книга находится в печати.
Для работы с кодом данной книги вы можете пользоваться любой операционной системой. Тем не менее, именно Linux в большинстве ситуаций был промышленным кодом, в котором предполагалось развёртывание, поэтому именно она и выступает предпочтительной операционной системой. MacOS X также должен работать без каких бы то ни было добавлений. Когда вы пользуетесь Windows, я бы рекомендовал вам установить Windows Subsystem for Linux (WSL {Прим. пер.: см. наши переводы Linux подсистема Windows (WSL) для профессионалов Хайдена Барнса и Изучаем подсистемы Windows для Linux Прэйтика Сингха}).
Альтернативой всем операционным системам служит Docker. Вы можете воспользоваться предоставляемыми в соответствующем репозитории образами Docker. Docker снабдит вас упакованной в контейнер средой Linux для исполнения необходимого кода.
Я рекомендую вам обладать 16ГБ оперативной памяти и 150 ГБ свободного дискового пространства. Глава 9. Анализ данных при помощи GPU с относящимся к графическим процессорам содержимым, потребует GPU NVIDIA, причём, по крайней мере, основывающейся на архитектуре Pascal; большинство выпускавшихся в последние пять лет графических процессоров должны отвечать этому требованию. Дополнительные подробности относительно подготовки ваших компьютера и программного обеспечения для того чтобы получить максимум от данной книги вы можете найти в Дополнении A. Настройка среды.
Тиаго Родригес Антан обладает степенью бакалавра технических наук в области информатики и степень доктора философии в области биоинформатики. В настоящее время работает в области биотехнологий. Тиаго пользуется Python со всеми его библиотеками для осуществления научных вычислений и задач обработки данных. Чаще всего для оптимизации критически важных частей алгоритмов он также пользуется языками программирования нижнего уровня, такими как C и Rust. В настоящее время он разрабатывает инфраструктуру на основе Amazon AWS, но большую часть своей карьеры он применял локальные вычислительные и научные кластеры.
Дополнительно к работе в данной отрасли, его опыт с академической стороной научных вычислений также содержит два постдока по анализу данных в Кембриджском и Оксфордском университетах. Будучи научным сотрудником университета Монтаны, он с нуля создал всю научную инфраструктуру для анализа биологических данных.
Тиаго является одним из соавторов Biopython, крупного пакета биоинформатики, написанного на Python, и автором книги "Bioinformatics с Python Cookbook" (Packt, 2022), которая вышла в третьем издании. Он также является автором и соавтором многих важных научных статей в области биоинформатики.
Фигура на нашей обложке Fast Python озаглавлена “Bourgeoise de Passeau” или “Bourgeoise of Passeau” и взята из коллекции Жака Грассе де Сен-Совера, опубликованной в 1797 году. Каждая иллюстрация тщательно нарисована и раскрашена вручную.
В те дни было легко определить, где живут люди и какова их профессия или положение в жизни, просто по их одежде. Manning прославляет изобретательность и инициативу компьютерного бизнеса книжными обложками, основанными на богатом разнообразии региональной культуры многовековой давности, оживлёнными фотографиями из таких как это собраний.
-
Сетевые протоколы для профессионалов безопасности, Йорам Орзач, Дипаншу Ханна, Packt Publishing, октябрь 2022
-
JavaScript для хакеров. Научитесь думать как хакер, Гарет Хейс, Leanpub, декабрь 2022
-
Как заниматься взломом словно легенда. Прорываемся в Windows, Спарк Флоу, No Starch Press, октябрь 2022
-
Управление оперативной памятью в реляционных системах баз данных, Педро Мехия Альварес, Марсело Леон Айяла, Сусана Ортега Сиснерос, Springer, август 2022
-
Атакующий код запуска оболочки с нуля, Ришалин Пиллэй, Packt Publishing, май 2022
-
Linux подсистема Windows (WSL) для профессионалов, Хайден Барнс, Apress, июнь 2021
-
Внутреннее устройство CPython, Энтони Шоу, Real Python, январь 2021
-
Контейнеры Linux и Виртуализация: с точки зрения ядра, Шашанк Мохан Джейн, Apress, октябрь 2020
-
Изучаем подсистемы Windows для Linux, Прэйтик Сингх, Apress, сентябрь 2020
-
Всё что требуется для RabbitMQ, 2е изд., Ловайса Йохансон, Дэйвид Доссо, Packt Publishing, август 2020
-
Практика загрузки. Изучение процесса загрузки Linux, Windows и Unix, Йогеш Бабар, Apress, июль 2020
-
Распределённые системы для практиков, Даймос Раптис, Leanpub, май 2020
-
Практическая автоматизация предприятия в Linux, Джеймс Фриман, Packt Publishing, январь 2020, Действенное выполнение крупномасштабной автоматизации инфраструктуры Linux с применением Ansible.
-
Внутреннее устройство баз данных, Алекс Петров, O`Reilly Media, Inc., октябрь 2019
-
Книга рецептов параллельного программирования Python. 2е изд., Джанкарло Закконе, Packt Publishing, сентябрь 2019
-
Полное руководство Ansible. 3е изд., Джеймс Фриман и Джесс Китинг, Packt Publishing, март 2019
-
Книга рецептов NGINX Дерек ДеДжонге, O’Reilly Media, Inc, ноябрь 2018
-
Полное руководство Ceph, 2е изд. Ник Фиск, Packt Publishing, февраль 2019
-
Docker для разработчиков Rails Роб Айзенберг, The Pragmatic Programmers, LLC., февраль 2019, с дополнениями по настройкам Django и 100Gb IB
-
Глава 11. SQL Server и контейнеры (включая Kubernetes) Боб Вордс, "Профессиональный SQL Server поверх Linux", Apress, октябрь 2018
-
Полное руководство параллельного программирования на Python Куан Нгуен, Packt Publishing, ноябрь 2018
-
Asyncio в Python 3 Цалеб Хаттингх, O’Reilly Media, Inc, март 2018
-
RabbitMQ для профессионалов Гайвин Рой, Manning Publications, сентябрь 2017
-
Proxmox. Полное руководство. 3е изд Васим Ахмед, Packt Publishing, ноябрь 2017
-
Книга рецептов Ceph, 2е изд Викхайят Умрао,Мишель Хаккет,Каран Сингх, Packt Publishing, ноябрь 2017
-
Изучаем Ceph, 2е изд., Энтони Д`Атри, Вайбхав Бхембре, Каран Сингх, Packt Publishing, октябрь 2017
-
Книга рецептов виртуализации KVM Константин Иванов, Packt Publishing, июнь 2017
-
Полное руководство работы с сетями на Python. Эрик Чоу, Июнь 2017
-
Контейнеризация при помощи LXC Константин Иванов, Packt Publishing, март 2017
-
Proxmox. Полное руководство. 2е изд., Васим Ахмед, Packt Publishing, май 2016
-
Книга рецептов Ceph Каран Сингх, Packt Publishing, февраль 2016
-
Полная виртуализация. Базовая коммерческая редакция: Proxmox-freeNAS-Zentyal-pfSense. Ли Р. Сюрбер, февраль 2016
-
Zabbix. Полное руководство. 2е изд., Андреа Далле Ваккье, сентябрь 2015
-
Книга рецептов Proxmox. Главы 1-6, Дополнения: Преобразование OpenVZ в LXC, Организация ограждения Васим Ахмед, Packt Publishing, август 2015
-
Изучаем Ceph Каран Сингх, Packt Publishing, январь 2015
Дополнительные ссылки:
Перевод: Copyright © 2022 ![]() All rights reserved. Ссылки обязательны (Refs and links are obligatory). | http://www.mdl.ru портфолио SD DC |
HPE DL360 G10 since 4300$ |