Skip to content

Home Администрирование Модуль processing
Модуль processing

Так что же это за модуль processing, о котором мы упомянули выше? На момент написания книги «processing — это пакет для языка Python, который поддерживает возможность порождения процессов с помощью API модуля threading из стандартной библиотеки...». Одна из замечательных особенностей модуля processing заключается в том, что он до определенной степени соответствует прикладному интерфейсу модуля threading. Это означает, что вам не придется изучать новый API, чтобы порождать новые процессы вместо потоков. Подробнее о модуле processing можно прочитать по адресу: http:// pypi. python. org/ py- pi/ processing.

Теперь, когда мы получили некоторые сведения о модуле processing, рассмотрим пример 10.23.

Запустив этот фрагмент, мы получили следующее:

Пример 10.23. Введение в модуль processing

Все, что делает эта программа, это предписывает каждому процессу приостановиться на количество секунд, соответствующее порядковому номеру процесса. Как видите, интерфейс модуля прост и понятен.

Теперь, когда у нас имеется своего рода программа «Hello World», демонстрирующая использование модуля processing, можно создать что-нибудь более интересное. Если вы помните, в разделе с описанием потоков управления мы создали простой многопоточный сценарий, вbinолняющий опрос подсети. Поскольку прикладной интерфейс модуля processing очень напоминает интерфейс модуля threading, мы можем реализовать практически идентичный сценарий, используя процессы вместо потоков управления, как показано в примере 10.24.

Пример 10.24. Утилита ping на основе процессов

Этот сценарий удивительно похож на многопоточную версию, которая рассматривалась ранее. Если запустить этот сценарий, мы увидим примерно следующее:

Этот пример требует дополнительных пояснений. Хотя прикладные интерфейсы модулей очень похожи, между ними все-таки есть некоторые отличия. Обратите внимание, что каждый из процессов запускается внутри бесконечного цикла, где вbinолняется извлечение элементов из очереди. Чтобы сообщить процессу о том, что он должен завершить работу, мы добавили условную инструкцию, которая проверяет, не опустела ли очередь. Каждый из 50 дочерних процессов сначала проверяет, не опустела ли очередь, и если в очереди нет элементов, процесс сам «убивает» себя, вызывая функцию sys. exit().

Если в очереди еще имеются элементы, то процесс благополучно извлекает очередной элемент, в данном случае - IP-адрес, и приступает к вbinолнению своего задания, то есть вbinолняет опрос заданного IP-адреса с помощью утилиты ping. Главная программа использует метод join(), точно так же, как и версия сценария, реализованная на основе потоков, и ожидает, пока очередь не опустеет. После того как все рабочие процессы завершатся, и очередь опустеет, следующая ниже инструкция print сообщит о завершении программы.

Благодаря похожести прикладного интерфейса модуль processing использовать так же просто, как и модуль threading. До этого мы обсуждали практическую реализацию на основе модуля processing сценария, использующего библиотеку Net-SNMP, которая по своей природе не является асинхронным расширением для языка Python.

Комментарии (0)

RSS feed Comments

Написать комментарий

smaller | bigger

busy
 

Регистрация




Top