Урок 1: делай прототип и переноси Python

urok 1 delaj prototip i perenosi python Текст и язык

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

Фактически сейчас мы касаемся истории развития Python. Современные строковые методы начинались как обычные функции Python в оригинальном модуле string. Позднее, благодаря широкому их использованию, они были оптимизированы и реализованы на языке C. При импорте модуля string происходила внутренняя замена большей части его содержимого функциями, импортированными из модуля расширения strop, написанного на языке C; методы модуля strop оказываются в 100-1000 раз быстрее, чем их эквиваленты на Python.

В результате была резко повышена производительность программ- клиентов модуля string без каких-либо изменений в интерфейсе. То есть клиенты модуля мгновенно стали быстрее без всякой модификации, за счет использования нового модуля на языке C. Аналогичный подход был применен к модулю pickle, с которым мы познакомились в главе 17, — появившиеся позднее модули cPickle в Python 2.X и _pickle в Python 3.X сохранили совместимость, но стали значительно быстрее.

Это служит хорошим уроком для тех, кто занимается разработкой на языке Python: модули можно сначала быстро разрабатывать на Python, а затем переносить на язык C, если требуется повысить их быстродействие. Поскольку интерфейсы к модулям Python и расширениям на языке C идентичны (оба типа модулей можно импортировать; оба содержат атрибуты в виде вызываемых функций), модули, перенесенные на язык C, являются обратно совместимыми со своими прототипами на языке Python. Для клиентов единственным результатом трансляции таких модулей является повышение производительности.

Обычно нет нужды переписывать все модули на языке C перед поставкой приложения клиенту: можно отобрать те модули, которые являются критическими для быстродействия (такие как string и pickle), и транслировать их, а остальные оставить на Python. Для выявления модулей, трансляция которых на язык C может дать наибольший выигрыш, используйте технику хронометража и профилирования, описанную в главе 18. Модули расширения, написанные на языке C, будут представлены в следующей главе.

Система holmes служила доказательством широких возможностей Python в целом, когда такие доказательства еще были необходимы, и последняя проверка показала, что она без внесения изменений способна работать под управлением Python 2.X. Однако ее реализация уже не отражает передовые методы программирования на языке Python. По этой причине я отказался от поддержки этой системы. В действительности она устарела настолько сильно и не развивалась так долго, что я решил не возвращаться к ней в этом издании вообще. Оригинальная реализация этой системы для Python 0.X включена в состав пакета примеров к книге, но она не была адаптирована для работы под управлением Python 3.X и не соответствует современным возможностям языка Python.

Таким образом, holmes можно признать системой, отжившей свое. Она утратила свой статус и не будет более обсуждаться здесь. Чтобы найти более современные инструменты искусственного интеллекта для Python, попробуйте поискать в Интернете. Это весьма интересная тема для исследования, при этом систему holmes, вероятно, лучше оставить в туманных далях истории Python (чтобы возродить ее, нужно обладать достаточным запасом смелости).

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий