【问题标题】:Spawning child workers from a master worker using Iron.io's IronWorker service使用 Iron.io 的 IronWorker 服务从 master worker 生成子 worker
【发布时间】:2014-03-18 04:17:36
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: php ironworker


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的信息,这听起来不错。但是,自从我发布了这个问题后,我就能够按照我的假设去做,而且它似乎正在工作。 :)
    • 很高兴你能成功!这是一种非常常见的 IronWorker 模式。
    【解决方案2】:

    简单,如果您需要儿童工人

    首先,你需要

    现在:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

      • 这基本上是我已经在做的(除了我使用exec()而不是pcntl_fork()),但我想使用 IronWorker 服务来完成同样的事情,因为整个过程只会轰炸我的服务器当它运行时,即每小时两次。我每小时两次从 10% 负载到 400% 负载大约 10 分钟。
      猜你喜欢
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 2020-11-20
      • 2020-04-25
      • 2018-11-17
      • 1970-01-01
      • 2020-05-29
      • 2016-07-28
      相关资源
      最近更新 更多