Порождение детей от основного работника с помощью службы IronWorker Iron.io
В настоящее время у меня есть скрипт PHP (например, masterProcessor.php
) что мой сервер выполняется через равные промежутки времени, используя cron. Этот скрипт имеет статический список из примерно 80 URL-адресов, которые он должен получить и обработать. Поскольку обработка каждого URL-адреса занимает несколько минут, для экономии времени сценарий делит 80 URL-адресов примерно на 10 наборов по 8 и запускает второй сценарий PHP (используя exec("childProcess.php")
) для каждого набора URL-адресов, и этот дочерний PHP-скрипт фактически обрабатывает каждый из 8 или около того URL-адресов, передаваемых из основного сценария.
Моя цель состоит в том, чтобы сделать это с помощью службы IronWorker от Iron.io, но я все еще не совсем понимаю, как это сделать. Большая часть их документов написана на Ruby, чего я не знаю, и на нескольких примерах PHP они показывают код, но не то, как на самом деле это настроить.
Вот как я думаю, что это будет работать, поэтому, пожалуйста, дайте мне знать, если я прав или нет здесь:
- Создайте "основного" работника и "дочернего" работника.
- Главный рабочий запускает дочерние задачи, отправляя каждую задачу полезной нагрузкой, содержащей URL-адреса для обработки.
- Дочерний работник будет обрабатывать URL-адреса, данные ему в полезной нагрузке.
- Наконец, мне нужно было запланировать запуск главного работника через равные промежутки времени, так же как я делаю это через cron с моей реализацией PHP.
У меня есть это право? Возможно ли, чтобы работник уволил других, нескольких работников / задач? Если так, как это достигается с помощью PHP IronWorker lib?
Любые рекомендации или советы, ресурсы и т. Д. Будет высоко ценится. Я извиняюсь за свое невежество, но я читал и исследовал, и я пытался экспериментировать локально, но я даже не могу заставить одного работника работать локально в Windows (он говорит, что он был выполнен, но журналы не распечатаны?).
3 ответа
Я бы посоветовал попробовать https://github.com/iron-io/iron_combine - это небольшой вспомогательный фреймворк с уже реализованным мастер-скриптом. Вам просто нужно реализовать slave и отправить 1 сообщение для каждого URL в mq.
В любом случае - ваш подход верен, если вы не хотите использовать iron_combine по какой-либо причине, просто сделайте это, как вы описали в вопросе. Если у вас возникнут какие-либо проблемы, Iron.io получил хороший канал поддержки http://www.hipchat.com/gym1ayjWj
Легко, если вам нужен детский
Прежде всего, вам нужно
- клиентская библиотека https://github.com/iron-io/iron_worker_php/blob/master/iron_worker.phar и
- учетные данные - вы можете скачать
iron.json
прямо из HUD
Сейчас:
1) объединить эти два файла в мастер-рабочий:
file 'iron_worker.phar'
file 'iron.json'
2) и используйте его как обычно:
<?php
require_once "phar://iron_worker.phar";
$worker = new IronWorker();
$worker->postTask('SlaveWorkerName', $payload);
3) не забудьте загрузить как главный, так и подчиненный
и 4) планирование - может быть выполнено один раз с использованием пользовательского интерфейса ( http://hud.iron.io/ -> проект -> рабочий -> запланированные задачи -> добавить) или с использованием $worker->postSchedule()
код - см. https://github.com/iron-io/iron_worker_php/blob/master/IronWorker.class.php
Я не уверен, как происходит PHP IronWorker, но вы можете использовать функцию pcntl_fork для создания дочерних процессов. Тогда ваш скрипт должен будет отслеживать каждый из этих процессов. Также эти функции можно использовать только в сети, а не через веб-интерфейс. http://us2.php.net/pcntl_fork
Вот учебник по многопроцессорности.
http://www.tuxradar.com/practicalphp/16/1/3
Как насчет разбить скрипт на пару разных файлов. Каждый файл делает 10, 20 или т. Д. О URL. Может быть проще, чем пытаться узнать, как работает управление процессами.