繁体   English   中英

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

[英]Spawning child workers from a master worker using Iron.io's IronWorker service

当前,我有一个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. 最后,我需要安排master worker定期运行,就像我通过cron在PHP实现中所做的一样。

我有那个权利吗? 一个工人甚至有可能解雇其他多个工人/任务吗? 如果是这样,如何使用PHP IronWorker lib来实现?

任何指导或技巧,资源等,将不胜感激。 我为自己的无知表示歉意,但是我一直在阅读和研究,并且尝试在本地进行实验,但是我什至无法让一个工人在Windows上本地运行(它说它已经执行了,但是没有打印出日志吗? )。

我建议尝试https://github.com/iron-io/iron_combine-这是已经实现了主脚本的小型帮助程序框架。 您只需要实现slave并将每个url推送1条消息到mq。

无论如何-您的方法是正确的,如果您出于某种原因不想使用iron_combine,请按照您所描述的进行操作。 如果您会遇到任何问题,iron.io都有不错的支持渠道http://www.hipchat.com/gym1ayjWj

很简单,如果你需要童工

首先,您需要

现在:

1)将这两个文件合并到master worker中:

file 'iron_worker.phar'
file 'iron.json'

2)并照常使用:

<?php
require_once "phar://iron_worker.phar";

$worker = new IronWorker();
$worker->postTask('SlaveWorkerName', $payload);

3)别忘了同时上传master和slave worker

和4)计划-可以使用UI( http : $worker->postSchedule() >项目->工人->计划任务->添加)或使用$worker->postSchedule()代码执行一次-参见https: //github.com/iron-io/iron_worker_php/blob/master/IronWorker.class.php#L631

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

这是有关多处理的教程。

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

将脚本分解成几个不同的文件怎么办? 每个文件约处理10个,20个或类似的URL。 尝试了解流程管理的工作原理可能会更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM