Порождение детей от основного работника с помощью службы 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 они показывают код, но не то, как на самом деле это настроить.

Вот как я думаю, что это будет работать, поэтому, пожалуйста, дайте мне знать, если я прав или нет здесь:

  1. Создайте "основного" работника и "дочернего" работника.
  2. Главный рабочий запускает дочерние задачи, отправляя каждую задачу полезной нагрузкой, содержащей URL-адреса для обработки.
  3. Дочерний работник будет обрабатывать URL-адреса, данные ему в полезной нагрузке.
  4. Наконец, мне нужно было запланировать запуск главного работника через равные промежутки времени, так же как я делаю это через 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

Легко, если вам нужен детский

Прежде всего, вам нужно

Сейчас:

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. Может быть проще, чем пытаться узнать, как работает управление процессами.

Другие вопросы по тегам