, Книга рецептов параллельного программирования Python. 2е изд

Книга рецептов параллельного программирования Python. 2е изд

Джанкарло Закконе

 

Первая публикация на английском языке: Август 2015

Второе издание на английском языке: Сентябрь 2019

Ссылка на продукт: 1050919

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

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

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

Опубликовано Packt Publishing Ltd.

Livery Place

35 Livery Street

Birmingham B3 2PB, UK

ISBN 978-1-78953-373-6

www.packtpub.com

2019-10-01

 Состав исполнителей

Автор
Джанкарло Закконе
Редактор ввода в эксплуатацию
Рича Трайпатхи
Редактор приобретения
Чаитайнья Наир
Редактор разработки содержимого
Рувика Рао
Главный редактор
Афшаан Хан
Технический редактор
Гаурав Гайла
Литературный редактор
Safis Editing
Координатор проекта
Праджакта Найк
Корректор
Safis Editing
Составитель указателя
Рекха Наир
Технолог
Джошуа Мискюитта

 Об авторе

Джанкарло Закконе более пятнадцати лет управлял исследовательскими проектами в научной и промышленной областях. Он является программистом и системным инженером в Европейском космическом агентстве (ESTEC), где в основном связан с кибербезопасностью систем спутниковой навигации.

Джанкарло имеет степень магистра по физике и учёной степени магистра в области научных вычислений.

Джанкарло уже выступает приводимых далее книг, доступных в Packt: Python Parallel Programming Cookbook (Первое издание), Deep Learning with TensorFlow (Первое издание) и Deep Learning with TensorFlow (Второе издание).

 Рецензент

Др. Мишель Галлой является разработчиком программного обеспечения, сосредоточенным на высокопроизводительных вычислениях и визуализации в научном программировании. В целом он работает c IDL, но, случается, применяет Python, C и CUDA. Мишель в настоящее время работает в Национальном центре исследования атмосферы (NCAR) в Солнечной обсерватории Мауна Лоа. Ранее он работал в Tech-X Corporation, в которой он был главным разработчиком GPULib, библиотеки IDL привязок для процедур вычислений с GPU ускорением. Он создатель и основной разработчик IDLdoc, mgunit и rIDL, которые все являются проектами с открытым исходным кодом, а также автором Modern IDL.

Ричард Марсден имеет 25 летний опыт профессионального программирования. Начав с области геодезической съёмки для нефтяной отрасли, он потратил последние 15 лет на запуск Winwaed Software Technology LLC, независимого разработчика программного обеспечения. Winwaed специализируется на вебсайте Mapping-Tools для инструментов и дополнений под приложения геодезической съёмки, такие как Caliper Maptitude, Microsoft MapPoint, Android и Ultra Mileage.

Мишель выступал техническим рецензентом ряда изданий Packt, в том числе, Python Geospatial Development и Python Geospatial Analysis Essentials, обе принадлежащие Эрику Вестра; а также Python Geospatial Analysis Cookbook, Мишеля Дайинира.

 www.PacktPub.com

 Предисловие

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

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

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

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

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

И последнее, но не менее важное: параллельные вычисления представляют собой некую попытку максимизировать этот бесконечный, но в то же самое время, всё более ценный и дефицитный ресурс, ресурс времени.Именно по этой причине параллельные вычисления переходят из мира очень дорогостоящих суперкомпьютеров, резервированных для избранных, к более экономичным решениям, базирующимся на множестве процессоров, GPU (Graphics Processing Units , графическим процессорам), либо к нескольким взаимосвязанным компьютерам, которые способны преодолевать ограничения последовательных вычислений и пределов отдельных ЦПУ.

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

С технологической точки зрения, в Python отсутствует обособленный этап компиляции (как это, к примеру, происходит в C), который вырабатывает некий исполняемый файл из исходного кода. Тот факт, что он является псевдо интерпретатором, превращает Python в некий переносимый язык. После того как написан некий исходный код, он может быть интерпретирован и исполнен на большинстве применяемых в настоящее время платформ, будь то платформа от Apple (macOS X) или PC (Microsoft Windows и GNU/Linux).

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

Python Parallel Programming Cookbook, Second Edition, содержит широкое разнообразие примеров, которые предлагают читатель конкретную возможность решения реальных задач. Она изучает основные принципы проектирования программного обеспечения для параллельных архитектур, настаивая на несомненной важности ясности всех программ и избегая сложной терминологии в угодя чистоте и непосредственности примеров.

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

 Для кого эта книга

Python Parallel Programming Cookbook, Second Edition, предназначена для разработчиков программного обеспечения, которые желают применять технологии параллельного программирования для написания мощного и действенного кода. прочтение данной книги позволит вам набраться опыта как в имеющихся основах, так и в современных вопросах параллельного программирования.

Сам язык программирования Python прост для применения и позволяет не специалистам запросто схватить и уяснить те темы, которые выводятся данной книгой.

 Что охватывает эта книга

Глава 1. Приступая к параллельному программированию и Python представляет некий обзор архитектур параллельного программирования и моделей параллельного программирования. Эта глава служит введением в язык программирования Python, обсуждает как характеристики этого языка, его простота изучения и применения, его расширяемость и богатство доступных библиотек программного обеспечения, а также приложений, всё это делает Python ценным инструментом для любых приложений и в особенности, конечно, для параллельного программирования.

Глава 2. Параллельность на основе потоков обсуждает параллелизм потоков с применением модуля Python threading. Читатели на законченных примерах программ изучат как синхронизировать потоки и манипулировать ими для реализации в своих многопоточных приложениях.

Глава 3. Параллельность на основе процессов послужит для читателя руководством о основанному на процесcе подходу к параллельной программе. Полный набор примеров покажет читателю как применять модуль Python multiprocessing.

Глава 4. Обмен сообщениями сосредоточена на системах взаимодействия с обменом передаваемых сообщений. В частности, на множестве примеров приложений будет описана библиотека mpi4py.

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

Глава 6. Распределённый Python вводит читателя в распределённое программирование, который состоит в определённом процессе агрегации некоторых вычислительных единиц для совместного исполнения некой отдельной вычислительной задачи прозрачным и согласованным образом. В частности, представляемый в этой главе пример описывает использование модулей socket и Celery для управления распределёнными задачами.

Глава 7. Облачные вычисления предоставляет некий обзор имеющихся основных технологий облачных вычислений в отношении к самому языку программирования Python. Обсуждаемая платформа PythonAnywhere очень полезна для разработки приложений Python в конкретном облаке и она будет изучена в данной главе. Данная глава также содержит пример приложений, демонстрирующих использование технологий контейнеров и без серверов.

Глава 8. Неоднородные вычисления рассмотрит современные GPU, которые предоставляют прорывную производительность для численных вычислений за счёт стоимости сложности программирования. В действительности, модели программирования GPU требуют чтобы сам программист вручную управлял бы необходимым обменом данных между ЦПУ и GPU. Эта глава обучит читателя на примерах программирования и вариантах применения тому,как эксплуатировать вычислительную мощность, предоставляемую картами GPU, используя мощные модули Python PyCUDA, Numba и PyOpenCL.

Глава 9. Отладка и тестирование Python является самой последней главой, которая вводит две важные темы инженерии программного обеспечения: отладку и тестирование. На практике будут пояснены следующие инфраструктуры: winpdb-reborn для отладки, а также unittest и nose для проверок программного обеспечения.

 Как получить от этой книги больше пользы

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

 Загрузка примеров кода

Вы можете загрузить файлы примеров кода по адресу из своей учётной записи: http://www.packtpub.com. Если вы приобрели книгу где- либо ещё, вы можете посетить http://www.packtpub.com/support и зарегистрироваться для получения этих файлов по электронной почте непосредственно на свой адрес.

Вы можете загрузить эти файлы с кодом выполнив следующие шаги:

  1. Зарегистрируйтесь на нашем вебсайте при помощи своего адреса электронной почты и пароля.

  2. Переместите указатель мыши на закладку SUPPORT в верхней части.

  3. Кликните по Code Downloads & Errata.

  4. Введите название книги в блок Search.

  5. Выберите книгу для которой вы ищете для загрузки файлы исходного кода.

  6. В ниспадающем меню выберите где вы приобрели эту книгу.

  7. Кликните по Code Download.

После загрузки убедитесь, пожалуйста, что вы раззиповали или раскрыли эту папку при помощи самой последней версии:

  1. WinRAR / 7-Zip для Windows

  2. Zipeg / iZip / UnRarX для Mac

  3. 7-Zip / PeaZip для Linux

Весь код в единой упаковке также размещён на GitHub. В случае обновления этого кода, он также будет обновлён и в обозначенном репозитории GitHub.

У нас также имеются и прочие упаковки кодов из нашего богатого каталога книг и видео- материалов , доступными в GitHub. Ознакомьтесь с ним!

 Загрузка цветных изображений этой книги

Мы дополнительно снабжаем вас файлом PDF, который содержит цветные изображения экранных снимков/ схем, использованных в данной книге. Цветные изображения помогут вам лучше понять изменения в выводе. Вы можете загрузить этот файл по адресу: https://static.packt-cdn.com/downloads/9781789533736_ColorImages.pdf.

 Соглашения

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

Кодовые слова в тексте, имена таблиц базы данных, имена папок, имена файлов, расширения файлов, имена путей, модели URL-адресов, ввод пользователя, и регулировки Twitter представлены следующим образом: "Исеется возможность убить некий процесс немедленно при помощи метода terminate".

Блок кода записываются следующим образом:


import socket
port=60000
s =socket.socket()
host=socket.gethostname()
 	   

Когда мы желаем привлечь ваше внимание к определённой части кода в блоке, соответствующие строки или элементы выделяются жирным шрифтом:


p = multiprocessing.Process(target=foo)
print ('Process before execution:', p, p.is_alive())
p.start()
 	   

Всякая командная строка ввода или вывода отображается так:


> python server.py
 	   

Жирным шрифтом отображаются новые термины или важные слова, которые вы видите на экране. Например, появляющиеся в тексте слова в меню или блоках диалогов. Вот некий пример: "Перейдите в System Properties | Environment Variables | User or System variables | New".

[Замечание]Замечание

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

[Совет]Совет

Советы и ловкие приёмы возникают таким образом.

 Разделы

В этой книге вы будете находить отдельные часто повторяющиеся заголовки (Приготовление, Как это сделать..., Как это работает..., Также ознакомьтесь... и Дополнительно). Чтобы получить чёткие инструкции как выполнить определённый рецепт, применяйте эти разделы следующим образом:

Приготовление

Этот раздел сообщит вам что ожидает данный раздел и описывает как настроить всё необходимое для данного рецепта и выполнить предварительные настройки.

Как это сделать...

Данный раздел содержит все шаги, которые следует осуществить в нём.

Как это работает...

Этот раздел обычно размещает подробное объяснение того что происходило в предыдущем разделе.

Также ознакомьтесь...

В этом разделе содержится дополнительная информация о данном рецепте чтобы вы получили больше сведений о самом рецепте.

Дополнительно

Данный раздел предоставляет полезные ссылки на прочую полезную для обсуждаемого рецепта информацию.

 Обратная связь с читателями

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

Для отправки обычного отклика просто пошлите электронное письмо на адрес feedback@packtpub.com с упоминанием заголовка книги в теме вашего сообщения.

Если у вас существует тема, в которой у вас имеется опыт и вы заинтересованы либо в написании, либо во вкладе в книгу, обратитесь к руководству по адресу www.packtpub.com/authors.

 Поддержка пользователей

Теперь, когда вы являетесь гордым владельцем книги Packt, у нас есть целый ряд моментов для помощи вам в получении максимальной выгоды от вашей покупки.

 Опечатки

Хотя мы и предприняли все меры чтобы обеспечить точность нашего содержимого, ошибки всё- таки возможны. Если вы обнаружили ошибку в нашей книге - возможно, ошибку в тексте или в коде - мы будем признательны если вы сообщите об этом нам. Сделав это, вы можете предостеречь остальных читателей от разочарования и помочь нам улучшить последующие версии данной книги. Если вы обнаружили ошибку, пожалуйста, сообщите о ней посетив www.packtpub.com/submit-errata, выбрав вашу книгу, кликнув на ссылку Errata Submission Form, и заполнив подробности найденной вами ошибки. Когда ваша ошибка будет проверена, вы получите уведомление и ошибка будет выложена на наш веб- сайт или добавлена в какой- нибудь перечень существующих ошибок с заголовком раздела Errata.

Для просмотра ранее выявленных ошибок посетите www.packtpub.com/books/content/support и введите название нужной книги в поле поиска. Необходимая информация появится в разделе Errata.

 Незаконное тиражирование

Пиратство, защищённых авторским правом материалов в Интернете является постоянной проблемой во всех средствах массовой информации. В Packt мы подходим к защите наших авторских прав и лицензий очень серьёзно. Если вы столкнётесь с какой-либо незаконной копией наших работ в любой форме в Интернете, пожалуйста, предоставьте нам сразу адрес местонахождения или имя веб-сайта, чтобы мы могли принять меры. {Прим. пер.: Согласно закону об авторском праве РФ, авторские права на перевод принадлежат авторам этого перевода. Данным переводом, по нашему мнению, мы служим популяризации основных стратегических направлений развития тем Packt. В случае наличия конструктивных предложений, готовы к тесному сотрудничеству.}

Пожалуйста, обратитесь по адресу copyright@packtpub.com со ссылкой на материалы содержащие признаки нарушения авторских прав.

Мы выражаем вам признательность в защите наших авторов и нашей возможности доносить до вас имеющего ценность содержимого.

 Вопросы

Если у вас есть проблемы по любым сторонам данной книги, вы можете контактировать с нами по адресу questions@packtpub.com и мы предпримем все меры в отношении ваших проблем.

 Содержание

Предисловие
Что охватывает эта книга
Что вам нужно для этой книги
Для кого эта книга
Соглашения
Обратная связь с читателями
Поддержка пользователей
Загрузка кодов примеров
Опечатки
Незаконное тиражирование
Вопросы
Глава 1. Приступая к параллельному программированию и Python
Зачем нам требуется параллельное программирование?
Систематика Флинна
Один поток команд, один поток данных (SISD)
Много потоков команд, один поток данных (MISD)
Один поток команд, много потоков данных (SIMD)
Много потоков команд, много потоков данных (MIMD)
Организация памяти
Разделяемая память
Распределённая память
Массовая параллельная обработка (MPP)
Кластеры рабочих станций
Неоднородные архитектуры
Модели параллельного программирования
Модель с разделяемой памятью
Многопоточная модель
Модель передачи сообщений
Модель с параллельными данными
Разработка параллельной программы
Декомпозиция задачи
Назначение задачи
Агломерация
Установление соответствия
Динамическое соответствие
Оценка значения производительности параллельной программы
Ускорение
Эффективность
Масштабируемость
Закон Амдала
Закон Густафсона
Введение в Python
Функции подсказки
Синтаксис
Комментарии
Присвоения
Типы данных
Строки
Управление потоком
Функции
Классы
Исключительные ситуации
Импорт библиотек
Управление файлами
Охватывающий список
Запуск сценариев Python
Установка пакетов Python при помощи pip
Установка pip
Обновление pip
Применение pip
Введение в параллельное программирование Python
процессы и потоки
Глава 2. Параллельность на основе потоков
Что такое поток?
Модуль Python threading
Определение потока
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Выявление значения текущего потока
Приготовление
Как это сделать...
Как это работает...
Задание подкласса потока
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Синхронизация потоков блокировкой
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Синхронизация потоков RLock
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Синхронизация потоков при помощи семафоров
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Синхронизация потоков условием
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Синхронизация потоков событием
Приготовление
Как это сделать...
Как это работает...
Синхронизация потоков барьером
Приготовление
Как это сделать...
Как это работает...
Синхронизация потоков очередью
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Глава 3. Параллельность на основе процессов
Основы модуля множественности процессов Python
Порождение процесса
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Именование процесса
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Выполнение процессов в фоновом режиме
Приготовление
Как это сделать...
Как это работает...
Дополнительно
Уничтожение процессов
Приготовление
Как это сделать...
Как это работает...
Дополнительно
Определение процессов в неком подклассе
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Применение очереди для обмена данными
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Применение конвейеров для обмена объектами
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Синхронизация процессов
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Применение пула процессов
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Глава 4. Обмен сообщениями
Технические требования
Понимание структуры MPI
Применение модуля Python mpi4py
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Реализация взаимодействия точка- точка
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Обход проблем взаимной блокировки
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Коллективное взаимодействие через широковещание
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Коллективное взаимодействие при помощи функции разброса
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Коллективное взаимодействие при помощи функции получения
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Коллективное взаимодействие с применением Всех-ко-всем
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Операция свёртки
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Оптимизация взаимодействия
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Глава 5. Асинхронное программирование
Применение модуля Python concurrent.futures
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Управление основным циклом событий через asyncio
Понимание циклов событий
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Обработка сопрограммам при помощи asyncio
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Манипулирование задачами при помощи asyncio
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Работа с asyncio и фьючерсы
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Глава 6. Распределённый Python
Введение в распределённое программирование
Типы распределённых приложений
Клиент- серверные приложения
Клиент- серверная архитектура
Взаимодействие клиент- сервер
Архитектура TCP/IP клиент- сервер
Приложения со множеством уровней
Применение модуля Python socket
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Типы сокетов
Сокеты потоков
Дополнительно
Управление распределёнными задачами при помощи Celery
Приготовление
Установка Windows
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
RMI при помощи Pyro4
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Реализация топологии цепочки
Дополнительно
Глава 7. Облачные вычисления
Что такое облачные вычисления?
Основы архитектуры облачных вычислений
Модели служб
SaaS
PaaS
IaaS
Модели распределения
Общедоступное облако
Частное облако
Облачное сообщество
Гибридное облако
Платформы облачных вычислений
Разработка веб приложений при помощи PythonAnywhere
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Докеризация приложения Python
Приготовление
Установка Docker for Windows
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Введение в вычисления без серверов
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Что такое функция Лямбда?
Почему без сервера?
Возможные проблемы и ограничения
Дополнительно
Глава 8. Неоднородные вычисления
Основы неоднородных вычислений
Основы архитектуры GPU
Основы программирования GPU
CUDA
OpenCL
Работа с PyCUDA
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Гетерогенное программирование с применением PyCUDA
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Реализация управления памятью с применением PyCUDA
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Введение в PyOpenCL
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Построение приложений при помощи PyOpenCL
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Поэлементные выражения с применением PyOpenCL
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Оценка приложений PyOpenCL
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
За OpenCL и PyOpenCL
Против OpenCL и PyOpenCL
За CUDA и PyCUDA
Против CUDA и PyCUDA
Дополнительно
Программирование GPU с применением Numba
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Глава 9. Отладка и тестирование Python
Что представляет собой отладка?
Что такое тестирование программного обеспечения?
Отладка при помощи Winpdb Reborn
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Взаимодействие через pdb
Приготовление
Взаимодействие через командную строку
Применение интерпретатора Python
Вставка директив в сам код для отладки
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Реализация rpdb для отладки
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Работа с unittest
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Тестирование приложений при помощи nose
Приготовление
Как это сделать...
Как это работает...
Также ознакомьтесь...
Дополнительно
Указатель