Книга рецептов параллельного программирования Python. 2е изд
Copyright © 2019 Packt Publishing
|
Данный документ предоставляется по лицензии Creative Commons Attribution 3.0 License, за исключением разделов со специальными оговорками. |
Первая публикация на английском языке: Август 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
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, Мишеля Дайинира.
Отрасль вычислений характеризуется нацеленным поиском всё возрастающий и действенной производительности, причём начиная с высококлассных приложений в разделах сетевых сред, телекоммуникаций, авионики, вплоть до встроенных систем в настольных компьютерах, ноутбуках и видео играх. Этот путь разработки простирается к системам с множеством ядер, в которых двух-, четырёх- и восьми- ядерные процессоры представляют собой лишь самое начало наступающего расширения ко всё возрастающему числу вычислительных ядер.
Такое расширение, тем не менее, создаёт некую проблему, причём не только для отрасли полупроводников, но также и для разработки приложений, которые могут выполняться при помощи параллельных вычислений.
Параллельные вычисления, в действительности, представляют собой одновременное использование множества вычислительных ресурсов для решения задач обработки, а потому они могут исполняться на множестве ЦПУ, разбивая задачу на дискретные части, которые могут обрабатываться одновременно, причём каждая и далее подразделяется на последовательности инструкция, которые могут выполняться последовательно в различных ЦПУ.
Вычислительные ресурсы могут содержать некий отдельный компьютер со множеством процессоров, произвольное число компьютеров, объединяемых сетевой средой, или же сочетанием обоих подходов. Параллельные вычисления всегда рассматривались как наивысшая точка или будущее вычислительных технологий и вплоть до последних нескольких лет они мотивировались численным моделированием сложных систем и обстановок, связанных с различными секторами: предсказания погоды и климата, химические и ядерные реакции, картрирование генома человека, сейсмическая и геологическая активность, поведение механических устройств начиная с протезов, заканчивая космическими челноками), электронные схемы и промышленные процессы.
Однако, в наши дни, всё больше коммерческих приложений возрастающими темпами требуют разработки всё более быстрых компьютеров для поддержки обработки больших объёмов данных изощрёнными способами. Приложения для этого включают в свой состав анализ данных и параллельные базы данных, нефтеразведку, поисковые системы и услуги сетевого бизнеса, компьютерную медицинскую диагностику, управление многонациональными компаниями, передовую графику и виртуальную реальность (в особенности в индустри видео игр), мультимедиа и технологии сетевого видео, а также совместные рабочие среды.
И последнее, но не менее важное: параллельные вычисления представляют собой некую попытку максимизировать этот бесконечный, но в то же самое время, всё более ценный и дефицитный ресурс, ресурс времени.Именно по этой причине параллельные вычисления переходят из мира очень дорогостоящих суперкомпьютеров, резервированных для избранных, к более экономичным решениям, базирующимся на множестве процессоров, 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 и зарегистрироваться для получения этих файлов по электронной почте непосредственно на свой адрес.
Вы можете загрузить эти файлы с кодом выполнив следующие шаги:
-
Зарегистрируйтесь на нашем вебсайте при помощи своего адреса электронной почты и пароля.
-
Переместите указатель мыши на закладку SUPPORT в верхней части.
-
Кликните по Code Downloads & Errata.
-
Введите название книги в блок Search.
-
Выберите книгу для которой вы ищете для загрузки файлы исходного кода.
-
В ниспадающем меню выберите где вы приобрели эту книгу.
-
Кликните по Code Download.
После загрузки убедитесь, пожалуйста, что вы раззиповали или раскрыли эту папку при помощи самой последней версии:
-
WinRAR / 7-Zip для Windows
-
Zipeg / iZip / UnRarX для Mac
-
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
- Глава 2. Параллельность на основе потоков
- Что такое поток?
- Модуль Python threading
- Определение потока
- Выявление значения текущего потока
- Задание подкласса потока
- Синхронизация потоков блокировкой
- Синхронизация потоков RLock
- Синхронизация потоков при помощи семафоров
- Синхронизация потоков условием
- Синхронизация потоков событием
- Синхронизация потоков барьером
- Синхронизация потоков очередью
- Глава 3. Параллельность на основе процессов
- Основы модуля множественности процессов Python
- Порождение процесса
- Именование процесса
- Выполнение процессов в фоновом режиме
- Уничтожение процессов
- Определение процессов в неком подклассе
- Применение очереди для обмена данными
- Применение конвейеров для обмена объектами
- Синхронизация процессов
- Применение пула процессов
- Глава 4. Обмен сообщениями
- Технические требования
- Понимание структуры MPI
- Применение модуля Python mpi4py
- Реализация взаимодействия точка- точка
- Обход проблем взаимной блокировки
- Коллективное взаимодействие через широковещание
- Коллективное взаимодействие при помощи функции разброса
- Коллективное взаимодействие при помощи функции получения
- Коллективное взаимодействие с применением Всех-ко-всем
- Операция свёртки
- Оптимизация взаимодействия
- Глава 5. Асинхронное программирование
- Глава 6. Распределённый Python
- Глава 7. Облачные вычисления
- Глава 8. Неоднородные вычисления
- Основы неоднородных вычислений
- Основы архитектуры GPU
- Основы программирования GPU
- Работа с PyCUDA
- Гетерогенное программирование с применением PyCUDA
- Реализация управления памятью с применением PyCUDA
- Введение в PyOpenCL
- Построение приложений при помощи PyOpenCL
- Поэлементные выражения с применением PyOpenCL
- Оценка приложений PyOpenCL
- Программирование GPU с применением Numba
- Глава 9. Отладка и тестирование Python
- Указатель