PHP的并行脚本执行和等待

时间:2016-05-17 09:04:26

标签: php sh

我必须从PHP启动许多脚本并尽快完成它们。但是,这些脚本是用不同的语言编写的。我已经以某种方式开始了它们,但我不知道如何等待它们。我的代码:

foreach ($commands as $command) {
    exec($command.' &');
}

PHP脚本停止执行,但后台仍有很多工作要做。如何在PHP中等待这些任务?

类似的问题:
Parallel processing in PHP - How do you do it? - 忽略等待/同步
Executing multiple PHP scripts in parallel, and being notified when finished - 仅限于PHP脚本

1 个答案:

答案 0 :(得分:0)

如果要执行的脚本是用不同的语言编写的,最好的方法可能是GNU parallel

请注意文档:

  

如果给出命令,GNU parallel解决与xargs相同的任务。如果没有给出命令,GNU parallel将表现得类似于cat | SH

因此,您可以在PHP中轻松构建一个由换行符分隔的任务列表,并将它们提供给this.refs.input.refs.input.setNativeProps({ text: '' });,如下所示:

parallel

使用PHP中的proc_open,将任务列表提供给echo $'ls\necho 42\npython3 -c "print(43)"' | parallel 1 2 3 42 43 ' parallel并不是那么难。

然后你只需等待并行完成,当并行终止时,所有子任务也终止,你可以轻松配置并行执行的任务数,如果你有太多,执行它们像你一样尝试做的事情并不比像stdin通常可以做到的那样慢5 * 5。