Внутреннее устройство CPython
Copyright © Real Python (realpython.com), 2012–2021
|
Данный документ предоставляется по лицензии Creative Commons Attribution 3.0 License, за исключением разделов со специальными оговорками. |
Обновлена: 25 января 2021
Логотипы “Python” and the Python являются торговой маркой или зарегистрированной торговой маркой Python Software Foundation, применяемой Real Python с разрешения этого фонда.
Благодарим вас за выгрузку этой электронной книги. Эта электронная книга лицензирована исключительно для вашего персонального обладания. Эта книга не может быть перепродана или выдаваться прочим людям. Если вы желаете совместно пользоваться этой книгой с прочими персонами, будьте добры приобрести дополнительную копию для каждого получателя. Если вы читаете эту книгу, но не покупали её, либо она не была приобретена исключительно для вашего пользования, будьте так любезны вернутся в realpython.com/cpython-internals и приобрести свою собственную копию. Благодарим Вас за уважение к тяжёлой работе над этой книгой.
ISBN 9781775093343 (на бумажной основе)
ISBN 9781775093350 (электронная)
2021-05-03
- Автор
- Энтони Шоу
- Разработка обложки
- Алдрен Сантос
- Дополнительное редактирование и правка корректуры
- Джейкоб Шмидт
- Технолог
- Джаоти Чауан
Что говорят читатели об этой книге
Это именно та книга, существование которой я бы желал много лет назад, когда я начинал своё путешествие по Python. После прочтения этой книги ваши навыки вырастут и вы сможете решать ещё более сложные задачи, которые способны улучшить наш мир.
- Кэрол Виллинг, разработчик ядра CPython и участник CPython Steering Council.
Глава "Параллелизм и одновременность" одна из моих самых любимых. Я искал глубокого проникновения в эту тему и нашёл Вашу книгу чрезвычайно полезной.
Естественно, после прочтения этой главы я не смог устоять и перед остальными Я жду- не дождусь, когда у меня появится моя собственная отпечатанная копия!
Я уже знакомился с Вашей статьёй `Руководство по исходному коду CPython`, которая побудила меня узнать больше о его внутреннем устройстве.
Существует большое число книг по Python, в которых обучают этому языку, но я не встречал ничего, что могло бы дать пояснение любознательным о его внутреннем устройстве.
И поскольку я в настоящее время я преподаю Python своей дочери, я добавил эту книгу в её список обязательного чтения. В настоящее время она изучает информационные системы в Государственном университете Джорджии.
- Милан Пэйтел, вице- президент (одного из ведущих инвестиционных банков)
Что меня больше всего впечатлило в книге Энтони, так это то, как в ней упорядочены в простой последовательности все этапы по внесению изменений в базовый код CPython. Это действительно похоже на `утраченное руководство`.
Погружение в основы C языка Python оказалось большим развлечением и это сняло у меня некоторое стародавние вопросы. Особенно поучительной я нашёл главу о распределении памяти CPythob.
Эта книга отличный (и уникальный) ресурс для всех, кто хочет поднять свои знания Python до более глубокого уровня.
- Дэн Бэйдер, автор Python Tricks и главный редактор Real Python.
Эта книга помогла мне лучше разобраться с тем, как именно работает лекисческий и синтаксический разбор в Python. Я рекомендую её в качестве источника, если и вам хочется понимать это.
- Флориан Далитц, приверженец Python
Исчерпывающее пошаговое руководство по внутреннему устройству Python, той теме, которая, на удивление, не имеет хороших ресурсов, причём в простой для понимания манере, как для новичков, так и для искушённых пользователей Python.
- Абнишек Шарма, специалист в области данных
Энтони Шоу является заядлым последователем Python и участник Python Software Foundation.
Энтони занимается программированием с 12 лет и возлюбил Python, оказавшись в ловушке в отеле в Сиэтле, штат Вашингтон, 15 лет спустя. Отказавшись от прочих языков программирования, которые он изучал, Энтони с тех пор занимается исследованиями, написанием и созданием курсов по Python.
Энтони также участвует в малых и крупных проекта Открытого исходного кода, в том числе CPython, а также участник Apache Software Foundation.
Страсть Энтони состоит в разбирательстве со сложными системами с последующим их упрощением и обучению им людей.
Джим Андерсон давно занимается программированием на разных языках. Он работал над встраиваемыми системами, создавал системы рапределённой сборки, управлял внешними поставщиками и участвовал во многих мероприятиях.
Джоанна Джаблонски является исполнительным редактором Real Python. Ей нравятся естественные языки в той же степени, что и языки программирования. Её любовь к головоломкам, узорам и мелким неприятным подробностям привела её к карьере переводчика. Это стало лишь вопросом времени, чтобы она полюбила новый язык Python! Она присоединилась к Real Python в 2018 году и с тех пор помогает последователям Python наращивать свой уровень.
"Созданный сообществом язык программирования благоприятствует счастью его пользователей по всему миру."
- Гвидо ван Россум "Речь в честь Дня короля"
Я люблю создавать инструменты, которые помогают нам учиться, дают возможность творить и побуждают делиться знаниями и идеями с прочими. Когда я слышу как эти инструменты и Python помогают вам решать реальные задачи, такие как изменение климата или болезнь Альцгеймера, я испытываю смирение, благодарность и гордость.
Благодаря своей четырёхлетней любви к программированию и решению задач, я потратил время на обучение, написание большого количества кода и обмен собственными идеями с другими. По мере того, как мир перешёл от мейнфреймов к услугам сотовой связи, к огромным чудесам Интернета и облачным вычислениям, я наблюдал глубокие изменения в технологиях. Все эти технологии, включая Python, обладают одной общей чертой.
В какой- то момент эти успешные нововведения были не более чем некой идеей. Создателям, как и Гвидо, пришлось идти на риск и решительные шаги для продвижения вперёд. Приверженность, обучение методом проб и ошибок, а также совместная работа через множество неудач, заложили прочную основу для успеха и роста.
Эта книга отправит вас в путешествие изучения чрезвычайно успешного языка программирования Python. Книга служит руководством тому, как работает CPython внутри себя. Это даст вам представление о том как основные разработчики создавали этот язык.
Сильные стороны Python включают в себя его удобочитаемость и гостеприимное сообщество, посвящающее себя образованию. Энтони использует эти сильные стороны при объяснении CPython, побуждая вас читать исходный код и разделять с вами строительные блоки самого языка.
Почему я хочу поделиться с вами этой книгой Энтони? Это именно та книга, существование которой я бы желал много лет назад, когда я начинал своё путешествие по Python. Что ещё более важно, я полагаю, что у нас, как членов сообщества, имеется уникальная возможность применения своего опыта для решения сложных проблем реального мира, с которыми мы сталкиваемся.
Я уверен, что после прочтения этой книги ваши навыки вырастут и вы сможете решать ещё более сложные задачи и улучшить наш мир.
Я надеюсь, что Энтони побудит вас побольше узнать о Python, вдохновит вас на создание инновационных вещей и придаст вам уверенности поделиться своими творениями со всем миром.
"Сейчас лучше чем никогда"
- Тим Питерс, "Дзен Python"
Давайте последуем этой мудрости Тома и приступим прямо сейчас.
Сердечно с вами,
- Кэрол Виллинг, основной разработчик CPython и участник CPython Steering Council
Существуют ли определённые фрагменты Python, которые выглядят просто как волшебство, например, такие как поиск элемента намного быстрее выполняется по словарям, чем обход циклом по списку? Как генератор запоминает состояние переменных всякий раз, когда возвращает некое значение? Почему вам не требуется выделять память как в прочих языках программирования?
Ответ заключается в том, что CPython, наиболее популярная среда времени выполнения Python, написана на читаемым человеком коде C и Python.
CPython абстрагируется от сложности базовой платформы C и вашей операционной системы. Это делает многопоточность простой и переносимой между платформами. Он избавляет от головной боли управления памятью в C и упрощает её.
CPython снабжает пишущего код Python разработчика платформой для написания масштабируемых и высокопроизводительных приложений. На определённом этапе вашего становления в качестве разработчика Python вам потребуется разобраться с тем как работает CPython. Эти абстракции не являются безупречными и они текучи.
После того как вы разберётесь с тем, как работает CPython, вы сможете полностью воспользоваться его мощностью и оптимизировать свои приложения. Эта книга поясняет основные концепции, идеи и технические стороны CPython.
В этой книги вы рассмотрите основные концепции стоящие за внутренним устройством CPython и изучите как:
-
Читать исходный код и путешествовать по нему
-
Компилировать CPython из исходного кода
-
Вносить изменение в синтаксис Python и компилировать его в вашу версию CPython
-
Управлять внутренней работой таких функций как списки, словари и генераторы, а также разобраться с ними.
-
Станьте хозяином возможностей управления памятью CPython
-
Масштабируйте свой код Python при помощи параллельности и одновременности
-
Изменяйте центральные типы новыми функциональными возможностями
-
Исполняйте комплекты тестирования
-
Профилируйте и выполняйте эталонное тестирование производительности своего кода Python и времени выполнения
-
Отлаживайте код C и Python как профессионал
-
Изменяйте и обновляйте компоненты библиотеки CPython для их внесения в последующие версии
Не спешите с каждой из глав и опробуйте демонстрации и интерактивные элементы. Вы ощутите достижение, когда разберётесь с основными концепциями, которые превратят вас в лучшего программиста Python.
Эта книга посвящена обучению на практических примерах, поэтому не забудьте настроить свою IDE на ранней стадии, прочитав инструкции, загрузив код и написав примеры.
Для достижения наилучших результатов мы рекомендуем чтобы вы избегали копирования и вставки примеров кода. Все примеры в этой книге предпринимают множество итераций чтобы стать верными и они также могут содержать ошибки.
Внесение ошибок и изучение их исправления являются частью нашего процесса обучения. Вы можете найти более действенные способы реализации этих примеров, попробовать их изменить и посмотреть какой эффект это даёт.
При достаточной практике вы овладеете этим материалом и в процессе получите удовольствие!
Насколько искушён в Python я должен быть чтобы воспользоваться этой книгой?
Эта книга предназначена для разработчиков Python промежуточного и высшего уровней. Предприняты все усилия для показа примеров кода, однако повсюду будут применяться методы промежуточного уровня.
Должен ли я владеть C чтобы пользоваться этой книгой?
Вам нет нужды быть профессионалом в C чтобы применять эту книгу. Если вы новичок для C, просмотрите Дополнение A. Введение в C для программистов Python для быстрого входа в кус дел.
Сколько времени потребуется на освоение этой книги?
Мы не рекомендуем стремительно читать эту книгу. Попробуйте читать по главе за раз, испытывая все примеры после каждой главы и одновременно изучая этот код. По завершению этой книги это составит вам великолепное справочное руководство, к которому вы сможете вернуться со временм.
Не устареет ли содержимое этой книги слишком быстро?
Python существует на протяжении более чем тридцати лет. К некторым частям кода CPython не прикасались с момента их первоначального написания. Многие из принципов в данной книге оставались прежними на протяжении десяти и более лет.
В действительности, при написании этой книги мы исследовали многие строки кода, которые были написаны Гвидо ван Россумом (автором Python) и остаются неприкасаемыми начиная с 1 версии.
Некоторые концепции этой книги совершенно новые. А часть из них даже экспериментальные. При написании этой книги мы преодолевали проблемы в имеющемся исходном коде и ошибки в CPython, которые позднее были исправлены или улучшены. Именно в этом и состоит чудо CPython как процветающего проекта с открытым исходным кодом.
Те навыки, которые вы получите из данной книги, помогут вам читать и понимать текущую и последующие версии CPython. Изменения постоянны, а экспертиза это нечто, что вы можете развивать по ходу дела.
Данная книга поставляется с некоторым числом бесплатных премиальных ресурсов, к которым вы можете получить доступ через realpython.com/cpython-internals/resources/. На этой веб- странице вы также можете обнаружить перечень исправлений с коррекциями, сопровождаемыми командой Real Python.
Образцы кода
Примеры и образцы настроек на протяжении этой книги будут помечаться заголовком, обозначающих их как часть папки
cpython-book-samples
:
cpython-book-samples/01/example.py
import this
Вы можете выгрузить образцы кода с realpython.com/cpythoninternals/resources/.
Лицензии кода
Все примеры сценариев Python, относящихся к данной книге лицензированы в соответствии с Creative Commons Public Domain (CC0) License. Это означает, что приветствуется использование всех частей данного кода для любых целей в ваших собственных программах.
CPython лицензируется в соответствии с Python Software Foundation 2.0 license. Фрагменты и образцы исходного кода CPython, используемые в этой книге подпадают под терминологию этой лицензии PSF 2.0.
Замечание | |
---|---|
Весь код из этой книги был протестирован при помощи Python 3.9 в Windows 10, macOS 10.15 и Linux. |
Соглашения о формате
Блоки кода применяются для представления образцов кода:
# This is Python code:
print("Hello, World!")
Не зависящие от операционной системы команды соответствуют формату в стиле Unix:
$ # This is a terminal command:
$ python hello-world.py
(Символ $
не является частью команды).
Специфичные для Windows команды имеют формат командной строки Windows:
> python hello-world.py
(Символ >
не является частью команды).
Синтаксис командной строки следует такому формату:
-
Текст без скобок
должен набираться так, как он отображён. -
<Текст внутри угловых скобок>
указывает на некую переменную, для который вам надлежит подставить некое значение. Например, вы можете заменить<filename>
соответствующим названием для определённого файла. -
[Текст внутри квадратных скобок]
указывает необязательный аргумент, который вы можете предоставить.
Жирный текст обозначает новый или важный термин.
Замечания и предостережения появляются в следующем виде:
Замечание | |
---|---|
Это примечание, занятое текстом-заполнителем. Быстрая коричневая лиса прыгает через ленивую собаку. (Съешь [же] ещё этих мягких французских булок да выпей чаю.) Быстрый коричневый питон скользит по ленивому кабану. |
Предостережение | |
---|---|
Это предостережение, также занятое текстом-заполнителем. Быстрая коричневая лиса прыгает через ленивую собаку. (Съешь [же] ещё этих мягких французских булок да выпей чаю.) Быстрый коричневый питон скользит по ленивому кабану. |
Любые ссылки на некий файл внутри исходного кода CPython будут показаны так:
path/to/file.py
Закладки или команды меню будут предоставляться в последовательности, выгдядящей следующим образом:
Ctrl + Space
Клавиатурные команды и Быстрые клавиши и для формата macOS, и для Windows будут выдаваться так:
File > Other > Option
Обратная связь и ошибки
Мы приветствуем идеи, предложения, обратные отклики и случающиеся разглагольствования. Вы нашли некую тему путанной? Вы обнаружили ошибку в тексте или коде? Мы не придали внимания теме, о которой вы бы желали знать больше?
Мы всегда стремимся улучшать свои учебные материалы. Какой бы ни была причина, отправьте свой отзыв по следующей ссылке: realpython.com/cpython-internals/feedback
О команде Real Python
В Real Python вас обучат навыкам программирования реальных задач силами сообщества профессиональных Последователей Python (Питонистов) по всему миру.
Наш вебсайт realpython.com, был запущен в 2012 году и в настоящее время помогает более чем трём миллионам разработчиков Python каждый месяц книгами, руководствами по программированию и прочими ресурсами глубокого обучения.
Вот как вы можете найти Real Python на просторах Веб:
- Предисловие
- Глава 1. Начинаем работать с исходным кодом CPython
- Глава 2. Настройка вашей среды разработки
- Глава 3. Компиляция CPython
- Глава 4. Язык и грамматика Python
- Глава 5. Конфигурация и входные данные
- Глава 6. Лексический и синтаксический разбор при помощи синтаксических деревьев
- Глава 7. Собственно компилятор
- Глава 8. Цикл расчёта
- Относящиеся к делу исходные файлы
- Важные термины
- Построение состояния потока
- Построение объектов кадров
- Тип объекта кадра
- Относящиеся к делу исходные файлы
- API инициализации объекта кадра
- Преобразование параметров ключевых слов в словарь
- Преобразование позиционных аргументов в переменные
- Упаковка позиционных аргументов в
*args
- Загрузка аргументов ключевых слов
- Добавление пропущенных позиционных аргументов
- Добавление пропущенных аргументов ключевых слов
- Свёртывание замыканий
- Создание генераторов, сопрограмм и асинхронных генераторов
- Исполнение кадра
- Стек значений
- Пример: Добавление элемента в список
- Выводы
- Глава 9. Управление памятью
- Выделение памяти в C
- Проектирование системы управления памятью Python
- Распределитель памяти CPython
- Области распределителя памяти объекта и PyMem
- Область распределителя сырой памяти
- Персональные распределители доменов
- Персональные уборщики выделенной памяти
- Арена памяти PyArena
- Подсчёт ссылок
- Сборка мусора
- Выводы
- Глава 10. Параллельность и одновременность
- Модели параллельности и одновременности
- Структура процесса
- Многопроцессный параллелизм
- Ветвление процесса в POSIX
- Многопроцессность в Windows
- Пакет
multiprocessing
- Относящиеся к делу файлы
- Порождение и ветвление процессов
- Создание дочернего процесса
- Конвейеризация данных дочернему процессу
- Исполнение дочернего процесса
- Обмен данными при помощи очередей и конвейеров
- Разделяемые состояния между процессами
- Аннотация мультипроцессности
- Многопоточность
- Асинхронное программирование
- Генераторы
- Сопрограммы
- Асинхронные генераторы
- Подчинённые интерпретаторы
- Выводы
- Глава 11. Объекты и типы
- Глава 12. Стандартная библиотека
- Глава 13. Комплект тестов
- Глава 14. Отладка
- Глава 15. Эталонное тестирование, профилирование и трассировка
- Глава 16. Последующие шаги
- Дополнение A. Введение в C для программистов Python