使用Iron.io的IronWorker服务从主工作人员中产生儿童工作者

时间:2014-03-18 04:17:37

标签: php ironworker

目前,我有一个PHP脚本(例如masterProcessor.php),我的服务器使用cron定期执行。此脚本有一个静态列表,其中包含大约80个必须提取和处理的URL。由于处理每个URL需要几分钟,为了节省时间,脚本将80个URL分成大约10组8个,并为每组URL和该子项触发第二个PHP脚本(使用exec("childProcess.php")) PHP脚本实际上处理从主脚本传递的8个左右的URL。

我的目标是使用Iron.io的IronWorker服务来实现这一目标,但我仍然对如何解决这个问题感到困惑。他们的大部分文档都在Ruby中,我不知道,而且他们展示代码的PHP示例很少,但没有如何实际设置它。

以下是我认为这会有用的方法,所以如果我在这里对错,请告诉我:

  1. 创建“主”工作人员和“儿童”工作人员。
  2. 主工作人员将启动子任务,向每个任务发送包含要处理的URL的有效负载。
  3. 子工作者将处理有效负载中为其提供的URL。
  4. 最后,我需要安排主工作者定期运行,就像我通过cron实现我的PHP实现一样。
  5. 我有这个权利吗?工人是否有可能解雇其他多个工人/任务?如果是这样,如何使用PHP IronWorker lib完成?

    非常感谢任何指导或提示,资源等。我为自己的无知道歉,但我一直在阅读和研究,我已尝试在本地进行实验,但我甚至无法让一个工人在Windows上本地运行(它说它已被执行,但没有打印出日志? )。

3 个答案:

答案 0 :(得分:3)

我建议尝试https://github.com/iron-io/iron_combine - 它是已经实现主脚本的小助手框架。你只需要为每个url实现slave和push 1消息到mq。

在任何情况下 - 你的方法是正确的,如果你不想出于任何原因使用iron_combine,只需按照你所描述的那样去做。如果你遇到任何问题,iron.io得到了很好的支持频道http://www.hipchat.com/gym1ayjWj

答案 1 :(得分:0)

很简单,如果您需要孩子工作人员

首先,你需要

现在:

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)调度 - 可以使用UI(http://hud.iron.io - &gt;项目 - &gt; worker - &gt;计划任务 - >添加)或使用$worker->postSchedule()代码完成一次 - 请参阅 https://github.com/iron-io/iron_worker_php/blob/master/IronWorker.class.php#L631

答案 2 :(得分:-1)

我不确定PHP IronWorker是如何发生的,但您可以使用pcntl_fork函数来创建子进程。然后你的脚本必须跟踪这些进程中的每一个。此外,这些功能只能在cli中使用,而不能通过Web界面使用。 http://us2.php.net/pcntl_fork

这是一个关于多处理的教程。

http://www.tuxradar.com/practicalphp/16/1/3

如何在几个不同的文件中破解脚本。每个文件都有10个,20个等等。可能更容易尝试了解流程管理的工作原理。