Ускоряем ваш Python при помощи Rust
Copyright © 2021 Packt Publishing
|
Данный документ предоставляется по лицензии Creative Commons Attribution 3.0 License, за исключением разделов со специальными оговорками. |
Первая публикация на английском языке: Декабрь 2021
Ссылка на продукт: 1151221
Все права защищены. Никакая часть этой книги не может быть воспроизведена, сохранена в поисковой системе или передана в любой форме или любыми средствами без предварительного письменного разрешения издателя, за исключением случаев кратких цитат, встроенных в критические статьи и обзоры.
При подготовке этой книги были предприняты все усилия чтобы гарантировать точность представленной информации. Тем не менее, информация, содержащаяся в этой книге, продаётся без гарантии в явном или неявном виде. Ни авторы, ни Packt Publishing, ни их дилеры и дистрибьюторы не будут нести ответственность за любые убытки, вызванные или предположительно вызванные прямо или косвенно этой книгой.
Packt Publishing пыталась предоставить информацию о товарных знаках обо всех компаниях и продуктов, упомянутых в данной книге для надлежащего использования капиталов. Тем не менее, Packt Publishing не может гарантировать точность этой информации.
Опубликовано Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK
ISBN 978-1-80181-144-6
2022-01-25
- Автор
- Максвелл Флиттон
- Управляющий группой продуктов
- Рича Трайпати
- Управляющий изания продукта
- Рича Трайпати
- Главный редактор
- Ниша Клитас
- Редактор разработки содержимого
- Вайшайли Рамкумар
- Технический редактор
- Прейдип Сейху
- Литературный редактор
- Safis Editing
- Координатор проекта
- Дикша Тхаккар
- Корректор
- Safis Editing
- Составитель указателя
- Манжу Эйрейсан
- Технолог
- Шанкар Калбхор
Моей жене, Мелани Чжан, которая была со мной и поддерживала меня в напряжённом рабочем графике со сжатыми сроками. Ты не только умна и заботлива, но и впечатляющий игрок команды.
Максвелл Флиттон является инженером- программистом, который работает в фонде моделирования финансовых потерь с открытым исходным кодом OasisLMF. В 011 году Максвелл получил степень бакалавра наук в области сестринского дела в Университете Линкольна, Великобритания. Работая по 12 часов в отделениях экстренной и неотложной медицинской помощи в больницах, Максвелл получил ещё одну степень по физике в Открытом Университете в Великобритании, а затем перешёл к другому важному этапу, получив диплом аспиранта по физике и технике в области медицины в UCL в Лондоне. Он работал над многочисленными проектами, например, над программным обеспечением медицинского моделирования для правительства Германии и курировал студентов вычислительной медицины в Имперском колледже Лондона. У него также имеется опыт работы в области финансовых технологий и искусственного интеллекта Monolith.
Премного благодарен содружеству Rust за раработку удивительного языка программирования с дружественным сообществом, которое готово раздвигать границы. Я также благодарен команде Monolith AI, где Сараванан Сатьянанда и Ричард Альфельд помогли мне вырасти как инженеру. Это было продолжено командой OasisLMF, где Бен Хейс, Стефан Струзик, Сэм Гэмбл и Хасан Чагани поддержали меня и помогли мне расти.
Марио Айдайвал - бразилец и любитель направленных на разработку программного обеспечения технологий, в основном, ориентированных на языки программирования. В свободное время он работает техническим менеджером и инженером- программистом. Он начал свой путь в качестве разработчика программного обеспечения в 2011 году, изучая лишь учебные материалы из Интернета, начав с изучения C и вскоре после этого перешёл на Python, что позволило ему получить свою первую работу после 6 месяцев обучения.
Сегодня, обладая 10- летним опытом работы, он доставлял программное обеспечение в различные области, включая кредитование, туризм и путешествия, искусственный интеллект, электронный обмен данными, автоматизацию процессов и криптовалюту. В настоящее время он сосредоточен на изучении и распространении языка Rust. Он также поддерживает и само сообщество Rust в проекте Rust By Example.
Бойд Джонсон работал в отрасли программного обеспечения начиная с 2015 года. В составе команды Bitwise IO совместно с партнёрами из Intel он работал над разработкой Hyperledger Sawtooth, блокчейна с открытым исходным кодом, на Python и Rust. Бойд работал, в частности, над слоем FFI между Python и Rust, а также над компонентами обработки транзакций. Вы можете прочитать больше о том, что написал Бойд, на сайте boydjohnson.dev.
Язык программирования Rust это захватывающий воображение новый язык программирования. он даёт нам безопасность памяти без процедуры сборки мусора, что имеет результатом быстрое время работы и низкое потребление памяти. Тем не менее, переписывать всё на Rust может быть дорого и рискованно, поскольку в Rust может отсутствовать поддержка пакетов для подлежащей решению задачи. Вот тут- то и приходят на помощь привязки и pip Python. Эта книга позволит вам писать модули Rust, которые могут устанавливаться при помощи pip. В результате вы сможете внедрять Rust по мере необходимости, не беря на себя весь риск и всю работу по переписыванию вашей системы полностью. Это делает для вас, как для разработчика, экспериментировать с Rust в ваших проектах Python и применять его.
Выгоду от этой книги получат разработчики Python, которые хотят ускорять свой код при помощи Rust или поэкспериментировать с Rust без получения большого риска или больших трудозатрат. Не требуется никаких базовых знаний по Rust. Эта книга обладает неким введением в Rust для разработчиков Python и пользуется примерами на Python для быстрого ускорения вами при помощи Rust.
Глава 1. Введение в Rust с точки зрения Python покрывает основы Rust чтобы сделать возможной разработку на Rust. Чтобы помочь вам уловить рассматриваемые понятия Rust, приводятся соответствующие примеры на Python.
Глава 2. Структурирование кода в Rust поясняет как выстраивать структуру программ Rust на множестве страниц и применять инструменты управления пакетами для организации и установки зависимостей.
Глава 3. Основы одновременности рассказывает как организовать в Rust многопоточность и множество процессов, поскольку Rust обладает "неустрашимым одновременным исполнением". Мы также рассмотрим одновременность в Python, чтобы увидеть имеющиеся отличия.
Глава 4. Сборка модулей pip в Python собирая пакеты Python, мы создаём пакеты, которые можно установить при помощи pip. Здесь также рассказывается как можно размещать в GitHub пакеты частным образом.
Глава 5. Создание интерфейса Rust для нашего модуля pip заставляет нас внедрить Rust в наш модуль pip и применять инструменты установки Rust для компиляции и применения кода Rust в нашем коде Python.
Глава 6. Работа с объектами Python в Rust рассматривает как совместимость не следует только в одном направлении. В этой главе мы получаем объекты Python и взаимодействуем с ними. Также мы создаём объекты в Rust.
Глава 7. Применение модулей Python при помощи Rust основывается на предыдущей главе и показывает нам как применять такие модули Python как NumPy в нашем коде Rust.
Глава 8. Комплексное структурирование Python в Rust показывает нам обёртывание всего рассмотренного нами в полностью функциональный пакет Python, написанный на Rust. Такой пакет обладает интерфейсами Python и функциональностью командной строки, которая получает файлов YAML для настроек.
Глава 9. Структурирование прикладного приложения Flask Python для Rust строит нам прикладное приложение Flask Python с базой данных PostgreSQL, балансировщиком нагрузки NGINX и рабочим процессом Celery для получения больших практических навыков работы с Rust. Все это упаковано в Docker, чтобы подготовить нас к внедрению Rust во все такие аспекты веб-приложения.
Глава 10. Внедрение Rust в прикладное приложение Flask Python описывает как взять построенное нами в предыдущей главе веб приложение и внедрить наш модуль Rust в надлежащий контейнер Docker для исполнителя Celery и приложения Flask. Мы также распечатываем те миграции, которые уже были применены для автоматической выработки схемы нашей базы данных с тем, чтобы наш код Rust был способен напрямую взаимодействовать с необходимой базой данных.
Глава 11. Рекомендации для интеграции Rust завершает эту книгу некими уловками относительно того как избегать распространённых ошибок, продолжая писать код Rust для Python.
Желательно чтобы вы разбирались в Python и были лишены апряжённости в отношении объектно- ориентированного программирования. Будут затрагиваться некоторые современные темы, такие как метаклассы, но они не являются существенными. В этой книге описаны программирование Rust, прикладные приложения Python и модули Python, устанавливаемые при помощи pip.
Рассмариваемое в этой книге программное/аппаратное обеспечение | Требования к операционной системе |
---|---|
Python 3 |
Windows, macOS или Linux |
Rust |
Windows, macOS или Linux |
Docker |
Windows, macOS или Linux |
Py03 |
Windows, macOS или Linux |
Redis |
Windows, macOS или Linux |
PostgreSQL |
Windows, macOS или Linux |
Если вы применяете цифровую версию данной книги, мы предлагаем вам набирать любой код этой книги или параметры настройки самостоятельно или получать доступ к такому коду через репозиторий GitHub (ссылка на него доступна в нашем следующем разделе). Следование этому поможет вам избежать любых потенциальных ошибок, связанных с копированием и вставкой для читающих PDF или электронную книгу {Прим. пер.: в своём переводе мы постарались проверять и это.}
Весь пакет кода для данной книге располагается в GitHub. У нас также имеются и прочие пакеты кодов из нашего богатого каталога книг и видео доступных по этому адресу. Проверьте и его!
Помимо всего прочего мы также предоставляем некий файл PDF, который содержит цветные изображения снимков экранов/ схем, применяющихся в данной книге. Вы можете получить их здесь.
На протяжении этой книги имеется ряд соглашений о применении текста в книге.
CodeInText
: указывают на кодовые слова в тексте, имена таблиц базы данных,
имена папок, имена файлов, модели URL-адресов, ввод пользователя, и обработчики Twitter. Вот некий образец:
"Смонтируйте выгруженный файл образа диска WebStorm-10*.dmg
в качестве другого
диска в вашей системе".
Блок кода установлен так:
use std::error::Error;
use std::fs::File;
use csv;
use super::structs::FootPrint;
Когда мы желаем привлечь ваше внимание к определённой части блока кода, соответствующие строки устанавливаются жирным шрифтом:
let code = "5 + 6";
let result = py.eval(code, None, Some(&locals)).unwrap();
let number = result.extract::<i32>().unwrap();
Весь ввод или вывод командной строки записывается следующим образом:
pip install git+https://github.com/maxwellflitton/flitton-fib-rs@main
Жирно: выделяются новые термины и важные слова или слова, которые вы видите на экране. Например, слова в меню или блоках диалогов появляются в тексте Жирно. Вот некий образец: "Это может быть выполнено посредством клика по закладке Settings и далее по закладке Secrets в боковой вставке слева, как вы можете наблюдать здесь".
Замечание | |
---|---|
Предостережения или важные замечания появляются в блоках подобных этому. |
Совет | |
---|---|
Советы и ловкие приёмы возникают таким образом. |
Обращения наших читателей всегда приветствуются. Дайте нам знать что вы думаете об этой книге - что вам нравится или не нравится. Обратная связь с читателями важна нам, так как помогает нам разрабатывать издания, от которых вы на самом деле получите максимальную пользу.
Для отправки обычного отклика просто пошлите электронное письмо на адрес 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. Знакомство с Rust
- Глава 1. Введение в Rust с точки зрения Python
- Глава 2. Структурирование кода в Rust
- Глава 3. Основы одновременности
- Раздел 2. Сплавляем Rust с Python
- Глава 4. Сборка модулей pip в Python
- Глава 5. Создание интерфейса Rust для нашего модуля pip
- Глава 6. Работа с объектами Python в Rust
- Глава 7. Применение модулей Python при помощи Rust
- Технические требования
- Исследование NumPy
- Построение модели в NumPy
- Применение NumPy и прочих модулей Python в Rust
- Повторное создание нашей модели NumPy в Rust
- Сборка функций get_weight_matrix и inverse_weight_matrix
- Сборка функций get_parameters, get_times и get_input_vector
- Сборка функций calculate_parameters и calculate_times
- Добавление функций вычисления в имеющиеся привязки Python и добавление зависимости NumPy в наш файл setup.py
- Сборка нашего интерфейса Python
- Выводы
- Вопросы
- Ответы
- Дальнейшее чтение
- Глава 8. Комплексное структурирование Python в Rust
- Раздел 3. Внедряем Rust в веб- приложение
- Глава 9. Структурирование прикладного приложения Flask Python для Rust
- Глава 10. Внедрение Rust в прикладное приложение Flask Python
- Глава 11. Рекомендации для интеграции Rust
- Дополнение A. Управление памятью и безопасность (Полное руководство Rust, 2е изд)
- Программы и память
- Как программы используют память?
- Управление памятью и его виды
- Подходы к выделению памяти
- Ловушки управления памятью
- Безопасность памяти
- Триединство безопасности памяти
- Типы указателей в Rust
- Выводы
- Указатель