我必须从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脚本
答案 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。