Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Внутри CPython гид по интерпретатору Python.pdf
Скачиваний:
2
Добавлен:
07.04.2024
Размер:
8.59 Mб
Скачать

Что дальше?

В этой главе рассматриваются три возможных варианта применения информации, изложенной в книге:

1.Написание модулей расширения на C или C++.

2.Улучшение ваших приложений Python.

3.Участие в проекте CPython.

Начнем с написания модулей расширения на C или C++.

СОЗДАНИЕ РАСШИРЕНИЙ C ДЛЯ CPYTHON

Функциональность Python можно расширять несколькими способами. Один из них — написание модулей Python на C или C++. Этот процесс может привести к улучшению производительности и упрощению доступа к библиотечным функциям C и системным функциям.

Если вы хотите написать модуль расширения C, вот вещи, к которым вам стоит вернуться:

zz Настройка компилятора C и компиляция модулей C в главе «Компиляция CPython».

zz Настройка среды разработки для C в главе «Настройка среды разработки».

zz Увеличение и уменьшение счетчика ссылок сгенерированных объектов в разделе «Подсчет ссылок» главы «Управление памятью».

zz Описание PyObject* и его интерфейсов в разделе «Типы объектов» главы «Объекты и типы».

Книги для программистов: https://t.me/booksforits

332    Что дальше?

zz Описание слотов типов и обращения к API типов Python из C в разделе «Слоты типов» главы «Объекты и типы».

zz Добавление точек останова в исходные файлы C для модулей расширения и их отладка в главе «Отладка».

СМ. ТАКЖЕ

Если у вас еще нет опыта написания модулей расширения C,обратитесь кстатье«Building a C Extension Module1»на сайте Real Python.Вней дается конкретный пример построения, компиляции и тестирования модуля расширения.

УЛУЧШЕНИЕ ПРИЛОЖЕНИЙ PYTHON

В книге мы рассмотрели несколько важных тем, которые помогут в улучшении ваших приложений:

zz Использование механизмов параллелизма и конкурентности для сокращения времени выполнения приложений в главе «Параллелизм и конкурентность».

zz Настройка алгоритма сборки мусора для повышения эффективности работы с памятью в приложениях в разделе «Сборка мусора» главы «Управление памятью».

zz Использование отладчиков для расширений C и обработки ошибок

в главе «Отладка».

zz Применение профайлеров для исследования времени выполнения вашего кода в разделе «Профилирование кода Python с использованием cProfile» главы «Бенчмарк, профилирование и трассировка».

zz Анализ выполнения кадров для изучения и отладки сложных проблем

в разделе «Трассировка выполнения кадров» главы «Цикл вычисления».

1 https://realpython.com/build-python-c-extension-module.

Книги для программистов: https://t.me/booksforits

Участие в проекте CPython    333

УЧАСТИЕ В ПРОЕКТЕ CPYTHON

За двенадцать месяцев вышло 12 дополнительных версий CPython, были сделаны сотни преобразований и отчетов об ошибках, а также тысячи коммитов в исходном коде.

CPython — один из самых крупных, динамичных и открытых программных проектов в мире. Знания, полученные в этой книге, помогут вам ориентироваться в нем и принимать участие в его совершенствовании.

Сообщество CPython охотно принимает новых участников. Но прежде чем предлагать какие-то улучшения или исправления, необходимо знать, с чего начать. Например:

1. Устранить ошибки, о которых сообщают разработчики на сайте bugs. python.org.

2. Исправить небольшие, хорошо описанные проблемы.

Рассмотрим каждый из этих вариантов более подробно.

Устранение ошибок

Все отчеты об ошибках и запросы на внесение изменений сначала отправляются на сайт bugs.python.org, также известный как BPO. Этот веб-сайт является баг-трекером проекта CPython. Если вы захотите отправить pull request на GitHub, то вам сначала понадобится номер BPO — код проблемы, созданный BPO.

Для начала зарегистрируйтесь в качестве пользователя; для этого выберите команду User Register в меню слева.

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

Чтобы избежать этого, после входа в систему выберите команду Your Queries Edit в меню слева. На странице выведется список запросов индексов ошибок, которые вы можете добавить в закладки:

Книги для программистов: https://t.me/booksforits

334    Что дальше?

Замените значение на leave in, чтобы добавить эти запросы в меню Your Queries.

Вот несколько запросов, которые я считаю полезными:

zz Easy Documentation Issues: улучшения документации, которые еще не сделаны.

zz Easy Tasks: задачи, которые были определены как подходящие для начинающих.

zz Recently Created: недавно созданные ошибки.

zz Reports Without Replies: сообщения об ошибках, которые остались без ответа.

zz Unread: непрочитанные сообщения об ошибках.

zz 50 Latest Issues: 50 проблем, которые были недавно обновлены.

Далее вы можете следовать руководству «Triaging an Issue»1, в котором описана последняя версия процесса публикации комментариев об ошибках.

Отправка pull request с решением проблемы

Определившись с проблемой, можно переходить к созданию исправления

иотправке его в проект CPython. При этом используется следующая схема:

1.Убедитесь в том, что у вас имеется номер BPO.

2.Создайте ветвь в вашем форке CPython. За описанием процесса загрузки исходного кода обращайтесь к главе «Загрузка исходного кода CPython».

1 https://devguide.python.org/triaging/.

Книги для программистов: https://t.me/booksforits

Участие в проекте CPython    335

3.Создайте тест для воспроизведения проблемы. Последовательность действий описана в разделе «Модули тестирования» главы «Набор тестов».

4.Внесите изменение, следуя принципам руководств по стилю PEP 7 и PEP 8.

5.Выполните набор регрессионных тестов и убедитесь в том, что все тесты проходят успешно. Регрессионные тесты будут автоматически выполняться на GitHub при отправке pull request, но лучше сначала проверить локально. За описанием процедуры обращайтесь к главе «Набор тестов».

6.Сохраните коммит и отправьте свои изменения на GitHub.

7.Перейдите по адресу github.com/python/cpython и создайте pull request для своей ветви.

Позже запрос будет проанализирован одной из команд отладчиков и закреплен за каким-то ключевым разработчиком (или командой) для рецензирования.

Как упоминалось ранее, проекту CPython требуется больше участников. Между отправкой изменения и его рецензированием может пройти час, неделя или несколько месяцев. Не огорчайтесь, если не получите немедленной реакции. Многие ключевые разработчики работают на добровольной основе, и часто рецензирование или объединение pull-запросов происходит партиями.

ВАЖНО

Важно, чтобы один запрос решал только одну проблему. Если в ходе написания исправления вы обнаружите еще одну проблему, отметьте ее и отправьте во втором запросе.

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

Другие варианты поддержки

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

Книги для программистов: https://t.me/booksforits