Главная страница
Навигация по странице:

  • Таблица 4.6.

  • 4.11. Упражнения 4.1.

  • 4.4.

  • 4.12.

  • Многопоточное программированиеВ этой главе


    Скачать 0.74 Mb.
    НазваниеМногопоточное программированиеВ этой главе
    Дата24.04.2023
    Размер0.74 Mb.
    Формат файлаpdf
    Имя файлаpart.pdf
    ТипДокументы
    #1086381
    страница8 из 8
    1   2   3   4   5   6   7   8
    4.10. Связанные модули
    В табл. 4.6 перечислены некоторые модули, которые можно использовать при программировании многопоточных приложений.
    Таблица 4.6. Стандартные библиотечные модули, связанные с многопоточной поддержкой
    Модуль
    Описание
    thread a
    Основной, находящийся на низком уровне модуль поддержки потоков threading
    Объекты для многопоточной организации работы и синхронизации высо- кого уровня multiprocessing b
    Запуск/использование подпроцессов с помощью интерфейса threading subprocess c
    Полный отказ от потоков и выполнение вместо них процессов
    Queue
    Синхронизированная очередь с последовательной организацией для не- скольких потоков mutex d
    Объекты мьютексов concurrent.futures e
    Библиотека высокого уровня для асинхронного выполнения
    SocketServer
    Создание/управление многопоточными серверами TCP или UDP
    a
    Переименован в _thread в Python 3.0.
    b
    Новое в версии Python 2,6.
    c
    Новое в версии Python 2.4.
    d
    Обозначен как устаревший в Python 2.6 и удален в версии 3.0.
    e
    Впервые введенный в Python 3.2, но предоставляемый вне стандартной библиотеки для версии 2.6 и последующих версий.
    4.11. Упражнения
    4.1. Сопоставление процессов с потоками. В чем состоят различия между процес- сами и потоками?
    4.2. Потоки Python. Какие типы многопоточных приложений обеспечивают наибольшую производительность в Python, ограничиваемые пропускной способностью ввода-вывода или пропускной способностью процессора?
    4.3. Потоки. Какие наиболее заметные отличия будут обнаружены после за- пуска многопоточного приложения в системе не с одним, а с несколькими процессорами? Как, по вашему мнению, будут выполняться несколько по- токов в этих системах?
    06_ch04.indd 232 22.01.2015 22:00:52

    233 4.11. Упражнения
    4.4. Потоки и файлы.
    а) Создайте функцию, которая получает байтовое значение и имя файла
    виде параметров или данных, введенных пользователем) и определяет, сколько раз байтовое значение появляется в файле.
    б) Теперь предположим, что входной файл является чрезвычайно большим.
    Допускается применение для чтения файла одновременно нескольких функций, поэтому измените полученное ранее решение в целях созда- ния многочисленных потоков, обрабатывающих разные части файла, что- бы каждый поток отвечал лишь за определенную часть файла. Соберите данные, полученные каждым потоком, и рассчитайте суммарное значе- ние. Воспользуйтесь модулем timeit для измерения продолжительности работы обоих решений, однопоточного и многопоточного, и прокоммен- тируйте разницу в производительности, если таковая будет обнаружена.
    4.5. Потоки, файлы и регулярные выражения. Для выполнения этого задания тре- буется очень большой файл почтового ящика. Если таковой отсутствует, со- едините все свои сообщения электронной почты в общий текстовый файл.
    Задание заключается в следующем. Воспользуйтесь регулярными выраже- ниями, предназначенными для распознавания адресов электронной почты и URL веб-сайтов, которые рассматривались ранее в этой книге, для преоб- разования всех адресов электронной почты и URL из указанного большого файла в актуальные ссылки. Эти ссылки необходимо сохранить в отдельном файле с расширением .html (или .htm), который можно открыть в веб-бра- узере для получения возможности переходить по ним с помощью щелчка мышью. Используйте потоки для проведения процесса преобразования од- новременно по всему большому текстовому файлу, после чего соберите по- лученные результаты в отдельный новый файл .html. Откройте этот файл в веб-браузере, чтобы проверить, действительно ли работают ссылки.
    4.6. Потоки и сети. В приложении службы интерактивной переписки, разрабо- танном в качестве упражнения в предыдущей главе, требовалось использо- вание в составе решения так называемых тяжеловесных потоков, или про- цессов. Преобразуйте это решение в многопоточное.
    4.7. *Потоки и программирование для веб. Приложение Crawler, которое пред- ставлено в главе 10 “Программирование для веб. CGI и WSGI”, является однопоточным приложением, предназначенным для загрузки веб-страниц.
    Его усовершенствованию способствовало бы применение многопоточно- го программирования. Обновите сценарий crawl.py (переименовав его в mtcrawl.py), чтобы для загрузки страниц использовались независимые по- токи. Обязательно воспользуйтесь механизмом блокировки того или иного типа для предотвращения конфликтов доступа к очереди ссылок.
    4.8. Пулы потоков. Внесите изменения в код сценария prodcons.py, который рассматривается в примере 4.12, чтобы в нем вместо потока производителя и одного потока потребителя могло применяться любое количество пото- ков потребителя (пул потоков) для обработки или выборки в любой мо- мент времени нескольких элементов из очереди Queue.
    4.9. Файлы. Создайте ряд потоков для подсчета количества строк в наборе тек- стовых файлов (который может иметь большой суммарный объем). Может
    06_ch04.indd 233 22.01.2015 22:00:52

    Глава 4

    Многопоточное программирование
    234
    быть предусмотрена возможность выбирать количество используемых пото- ков. Сравните производительность многопоточной и однопоточной версий этого кода. Совет. Ознакомьтесь с упражнениями в конце главы 9 в книге
    Core Python Programming или Core Python Language Fundamentals.
    4.10. Параллельная обработка. Возьмите за основу свое решение упражнения 4.9 и примите к выбранной вами произвольной задаче, такой как обработка набора сообщений электронной почты, загрузка веб-страниц, обработка веб-каналов RSS или Atom, усовершенствование обработки сообщений сер- вером интерактивной переписки, поиск решения головоломки и т.д.
    4.11. Примитивы синхронизации. Изучите каждый из примитивов синхронизации в модуле threading. Опишите их назначение, укажите возможную область их применения и подготовьте примеры рабочего кода для каждого из них.
    Следующий ряд упражнений касается сценария candy.py, который рассматри- вался в примере 4.11.
    4.12. Перенос в версию Python 3. Возьмите за основу сценарий candy.py и при- мените к нему инструмент 2to3 для создания версии Python 3 с именем candy3.py.
    4.13. Модуль threading. Добавьте к сценарию средства отладки. В частности, для приложений, в которых используются семафоры (с начальным значением, как правило, больше 1), можно предусмотреть точное определение значе- ния счетчика в любое конкретное время. Подготовьте вариант сценария candy.py (который можно назвать candydebug.py) и реализуйте в нем воз- можность отображать значение счетчика. Вам может потребоваться изучить исходный код сценария threading.py, как было указано выше в одном из советов. После внесения этих изменений можно откорректировать вывод сценария, чтобы он выглядел примерно так:
    $ python candydebug.py starting at: Mon Apr 4 00:24:28 2011
    THE CANDY MACHINE (full with 5 bars)!
    Buying candy... inventory: 4
    Refilling candy... inventory: 5
    Refilling candy... full, skipping
    Buying candy... inventory: 4
    Buying candy... inventory: 3
    Refilling candy... inventory: 4
    Buying candy... inventory: 3
    Buying candy... inventory: 2
    Buying candy... inventory: 1
    Buying candy... inventory: 0
    Buying candy... empty, skipping all DONE at: Mon Apr 4 00:24:36 2011 06_ch04.indd 234 22.01.2015 22:00:52
    1   2   3   4   5   6   7   8


    написать администратору сайта