1

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

我的目标是使用 Iron.io 的 IronWorker 服务来实现这一点,但我仍然对如何去做这件事有点困惑。他们的很多文档都是用 Ruby 编写的,我不知道,他们有几个 PHP 示例显示了代码,但没有显示如何实际设置它。

以下是我认为这将如何工作,所以请让我知道我在这里是对还是错:

  1. 创建一个“主”工人和一个“子”工人。
  2. master worker 会触发子任务,向每个任务发送一个包含要处理的 URL 的有效负载。
  3. 子工作者将处理在有效负载中提供给它的 URL。
  4. 最后,我需要安排 master worker 定期运行,就像我在 PHP 实现中通过 cron 所做的那样。

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

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

4

3 回答 3

3

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

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

于 2014-03-18T04:58:57.327 回答
0

很简单,如果你需要童工

首先,你需要

现在:

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://hud.iron.io -> project -> worker -> 计划任务 -> add) 或使用$worker->postSchedule()代码完成一次 - 请参阅 https://github.com/iron -io/iron_worker_php/blob/master/IronWorker.class.php#L631

于 2014-03-19T01:32:42.873 回答
-1

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

这是关于多处理的教程。

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

将脚本分解为几个不同的文件怎么样?每个文件执行 10、20 等大约 url。可能比尝试了解流程管理的工作原理更容易。

于 2014-03-18T04:34:05.217 回答