Компонент POE::Component::Child. Создание дочерних процессов в POE

Простой пример использования POE::Component::Child

С помощью компоненты POE::Component::Child мы создаем POE-программу, которая для выполнения некоторых задач создает дочерние процессы.

Сначала создается и выполняется первый дочерний процесс, после завершения работы первого — второй. Когда и второй закончит свою работу — программа завершается.

Результат работы скрипта:

 

Краткий обзор возможностей компонента POE::Component::Child

Компонент POE::Component::Child является оболочкой для POE::Wheel::Run. Делает использование POE::Wheel::Run более удобным и предоставляет объектно-ориентированный интерфейс к нему. Дочерние процессы создаются непосредственно POE::Wheel::Run, с помощью fork.

Методы компонента

new

Метод создает экземпляр компонента. На вход принимает либо хеш, либо ссылку на хеш.

  • alias — Задает имя сессии, по которому к ней можно будет обращаться при вызове post. По умолчанию — main.
  • events — Ссылка на хеш, который содержит список событий для текущего компонента, со ссылками на соответствующие обработчики. Варианты допустимых событий: stdout, stderr, done, died, error.
  • debug — установка флага включает вывод отладочной информации.
run

Метод принимает список команд и параметров для запуска. Возвращает id wheel, который может пригодиться, если запускается несколько разных команд.

write

Метод может использоваться для отправки массива информации дочернему процессу.

quit

Организует корректное завершение программ из дочерних сессий. Однако, полное закрытие дочерних процессов организуется с помощью метода shutdown().

kill

Посылает сигнал для насильственного завершения программ.

shutdown

Метод завершает работу всех дочерних процессов и закрывает их.

wheelid

Используется для получения wheelid. В дальнейшем может использоваться для вызова методов, например, kill() или shutdown().

События дочерних процессов

Обработчики событий всегда получают на вход два аргумента: ARG0 и ARG1. Первый содержит ссылку на объект, второй — хеш с параметрами.

Например, при выводе результатов в STDOUT, функции-обработчику передавался в качестве ARG1 хеш, с ключами out и wheel. Out содержал выводимую строку данных, wheel — id.

stdout

Данное событие генерируется при любом выводе данных. Вывод данных осуществляется построчно. В нашем примере для вывода 3х-строк со списком процессов, вызов события stdout и его обработчика my_stdout осуществляется 3 раза.

stderr

Событие генерируется при любом выводе в STDERR.

done

Генерируется после завершения работы дочернего процесса.

died

Вызывается в случае аварийного завершения дочернего процесса. Является взаимоисключающим с done.

error

Событие генерируется, если дочерний процесс вернул ошибку.

Полезная ссылка

poe.perl.org: Child Component

search.cpan.org: POE::Component::Child