Главная » Просмотр файлов » Саммерфилд - Программирование на Python 3

Саммерфилд - Программирование на Python 3 (1077331), страница 108

Файл №1077331 Саммерфилд - Программирование на Python 3 (Саммерфилд - Программирование на Python 3) 108 страницаСаммерфилд - Программирование на Python 3 (1077331) страница 1082018-01-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 108)

Экземпляры класса 1лгеаотпз. [осК() являются менеджерами контекста, которые приобретают блокировку на входе и освобождают ее на выходе. Инструкции и11Ь блокируются, пока блокировка МЬ5 Еоск не будет освобождена, если какой-либо другой поток уже приобрел ее. В первой инструкции и!тл, а Менеджеры контекста, стр. 428 Сначала создается пустой словарь со значениями по умолчанию, в котором каждый ключ является значением контрольной суммы МЭб, а значение — множеством имен файлов, которые имеют соответствующее значение контрольной суммы. Затем выполняются итерации по всем файлам и для каждого файла извлекается его контрольная сумма МВб, если она уже была вычислена ранее; в противном случае она вычисляется. Делегирование работы потокам выполнения 483 после приобретения блокировки, из словаря извлекается значение контрольной суммы М))5 (или )(опе, если она еще не вычислялась для текущего файла).

Если в качестве контрольной суммы получено значение )(опе„ее необходимо вычислить, и в этом случае она записывается в словарь аб5 Ггоа Г!1епазе, чтобы предотвратить повторное ее вычисление. Обратите внимание, что каждый раз мы стараемся минимизировать объем работы, выполняемой в контексте блокировки, чтобы свести продолжительность блокировки остальных потоков к минимуму— вданном случае в контексте блокировки выполняется единственное обращение к словарю. Строго говоря, мы вообще можем не использовать блоГпобвпьная кировки при использовании интерпретатора СРу1)топ, бпоккровка так как глобальная блокировка интерпретатора (ОН.) 6(1,стр.478 эффективно синхронизирует все попытки обращения к словарю.

Однако при разработке программы мы решили не полагаться на реализацию интерпретатора с глобальной блокировкой и поэтому явно используем блокировку. Гсг Гт1впвэвв 1п кббв.кв1иевО; 1( 1вп(Г11епвзев) == т: сспттпсе вв1т.гввс1(в Сивое.рот("(0)оир11свтв Г11вв ((1:п) Ьутвв):" "КпК1(2)".Гсгзвт(ве1т.пьеьег, ывв, "КЬКт".)Ь(п(всгтеб(гт1епвпев)))) В конце выполняется цикл по элементам локального словаря э05в и для каждого множества, содержащего более одного имени файла, в очередь с результатами добавляется многострочный текст.

Добавляемый текст содержит номер рабочего потока (по умолчанию пустая строка), размер файла в байтах и все имена файлов дубликатов. Нам не требуется использовать блокировку при обращении к очереди с результатами, так как она является экземпляром класса свесе. Осеае, который автоматически выполняет блокировку. Классы из модуля дсесе существенно упрощают создание многопоточных приложений, а на случай, когда нам требуется испольэовать блокировки явно, модуль тлгеас!пд может предложить множество возможных вариантов. В данном примере мы использовали простейшую блокировку типа тлгеаб!пд.

ЬосК, но имеются и другие разновидности блокировок, включая тлгевб!пд. ЙЬосК (блокировка, которая может получаться повторно потоком, который уже владеет ею), тлгезбтпд. Зеаврлоге (блокировка, которая может использоваться для защиты заданного числа ресурсов) и тлгеас(пд. Соло!1!оп, которая обеспечивает условие ожидания. 484 Глава 9. Процессы и потоки о При использовании нескольких потоков выполнения Глабальмая алокмровка часто можно получать более простые решения, чем при 6!Ц стэ. 478 использовании модуля воЬр госева, но, к сожалению, многопоточные программы на языке Ру1)ьоп не всегда позволяют добиться производительности, какую можно получить при реализации обработки данных несколькими процессами.

Как уже отмечалось ранее, камнем преткновения здесь становится стандартная реализация интерпретатора РуФ)!оп, поскольку интерпретатор СРу- 1)ьоп в каждый конкретный момент времени может выполнять программный код на языке РуФ)!оп только на одном процессоре, даже когда в программе выполняется сразу несколько потоков. Попытка решить эту проблему была предпринята в модуле во111ргосеввшо, и, как уже говорилось ранее„среди примеров к этой книге имеется программа угершогй-т.ру, использующая этот модуль, которая отличается от рассматривавшейся выше версии всего тремя строками.

Похожее преобразование можно выполнить и в программе /!лййир!!са!езй.ру, рассматривавшейся в этом подразделе, но на практике применять этот модуль не рекомендуется. Несмотря на то, что модуль ао11(ргосевв!п9 для упрощения подобных преобразований предлагает АР1 (Арр11са11оп Ргодгаппп1пя 1пФег1асе — прикладной программный интерфейс)„близко совпадающий с АР1 модуля сп геао1п9, тем не менее эти два АР1 не являются идентичными и имеют некоторые различия. Кроме того, чисто механический переход с использования модуля 1ПгеаО1п9 на использование модуля ао111ргосевв1п9 скорее всего возможен только для небольших и простых программ, таких как угершогй-!.ру, поэтому лучше разрабатывать программы, изначально опираясь на модуль ао111ргосевв1по.

(В примерах к книге имеется программа /!пййир!!са!ез-тру, она выполняет ту же работу, что и программа /(лййир!!са!езй ру, но делает это несколько иначе и использует модуль ао111ргосевв1по.) В процессе разработки находится еще одно решение — версия интерпретатора СРуФ)!оп с поддержкой выполнения многопоточных программ. Самые свежие сведения о ходе разработки можно получить по адресу шшш.гойе.уооу!е.сот/р/ру!Иоп-Мгеайза/е.

В заключение В этой главе было показано, как создавать программы, запускающие другие программы с помощью модуля воЬргосевв, входящего в состав стандартной библиотеки. Программам, запускаемым с помощью модуля воЬр госева, можно передавать аргументы командной строки, поставлять данные через их стандартный поток ввода и получать результаты через их стандартный поток вывода (и через стандартный поток вывода сообщений об ошибках).

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

В этой главе также было показано, как создавать многопоточные программы. К сожалению, такие программы не имеют возможности использовать все преимущества наличия многоядерного процессора (если они работают под управлением стандартной реализации интерпретатора СРуФЬоп), поэтому для языка Ру()зоп использование нескольких процессов часто является более практичным решением, если дело касается производительности. Тем не менее мы видели, что модуль цэеце и механизмы блокировок языка Ру(Поп, такие как гзкеаозлц.

~оск, делают создание многопоточных программ простым делом, и что в случае простых программ, где достаточно применения объектов модуля ццеце, таких как цахесе.0цеэе и ццеце. Рг(ог(1у0эеце, можно вообще отказаться от явного использования блокировок. Несмотря на то, что многопоточное программирование несомненно приобретает все большее распространение, тем не менее многопоточные программы доставляют больше хлопот при разработке, отладке и сопровождении, чем однопоточные.

Однако в многопоточных программах проще организовать взаимодействие между потоками, например, посредством совместно используемых данных (при помощи классов из модуля ццеце или с использованием блокировок) и синхронизацию потоков (например„для сбора результатов), чем в случае нескольких процессов. Наличие нескольких потоков выполнения может оказаться весьма полезным в программах с графическим интерфейсом, которые должны производить длительные вычисления и сохранять возможность отклика на действия пользователя, включая возможность отменить выполнение задачи. Но в случае использования удобного механизма взаимодействий между процессами, такого как разделяемая память или очередь, доступная нескольким процессам, предлагаемая пакетом ээ11зргэсеээ(лц, использование нескольких процессов может оказаться более предпочтительной альтернативой многопоточным программам.

В следующей главе будет продемонстрирован еще один пример многопоточной программы сервера, которая обрабатывает каждый запрос клиента в отдельном потоке и использует блокировки для защиты совместно используемых данных. 486 Глава 9. Процессы и потоки Упражнения 1. Скопируйте и модифицируйте программу ягергбогй-рру так„чтобы дочерние процессы в ней ничего не выводили, а главная программа собирала бы результаты и после завершения всех дочерних процессов сортировала и выводила полученные данные. Для этого достаточно будет изменить только функцию аасп(), добавив три строки и изменив три строки. Для реализации этого упражнения придется проявить внимание и смекалку, и, возможно, вам потребуется прочитать документацию с описанием модуля вьЬргосевв. Решение приводится в файле ягергрогй-р алвру.

2. Напишите многопоточную программу, которая читает содержимое файлов, имена которых перечислены в командной строке (и рекурсивно — содержимое файлов во всех каталогах, перечисленных в командной строке). Все файлы, которые являются файлами ХМ] (то есть начинающиеся с символов е<?ХИ1ч), следует проанализировать с помощью парсера ХМ], и для каждого воспроизвести список уникальных тегов, используемых в файле, или вывести сообщение, если возникла какая-либо ошибка. Ниже приводится пример вывода программы: ./бвтв/бчбв.хи1 гв ап ХИС 111в СПаС чввв СПе то1!очспд свдп: бчб бчбв ./баса/баб.а1х св ап хиь 111е спас пав спе тб11пчспд вггог: исвпасспеб свд: 11пе 7889, со1чпп 2 ./бвсв/спс1бепсв.а1х 1в ап хис 111е спас чвев спе то11пч!пд свдп; в!грот! спсюепс !пс1бепсв пвггатсче Самый простой способ написать такую программу состоит в том, чтобы модифицировать копию программы /1пййир(1сатев-сру, хотя вы, конечно, можете написать программу с самого начала.

Характеристики

Тип файла
DJVU-файл
Размер
6,88 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6439
Авторов
на СтудИзбе
306
Средний доход
с одного платного файла
Обучение Подробнее