我正在异步启动10个进程:
$procs = [];
for($i = 0; $i < 10; $i++) {
$proc = new Process('ls -lsa');
$proc->start();
$procs[$i] = $proc;
}
现在我想等待异步,让每个进程在等待时完成并打印出状态信息:
foreach($procs as $proc) {
$proc->wait(function ($type, $buffer) {
if (Process::ERR === $type) {
// Print out error ...
} else {
// Print out state informations ...
});
}
}
问题在于等待功能。它等待任务完成,然后继续执行下一个任务。但我想让它以异步方式运行。
我该怎么做?
谢谢!
答案 0 :(得分:0)
根据Symfony文档,wait
方法是阻塞的,因此将等到该过程完成后再继续。
如果您不想等待,可以重构代码以使用run
方法:
for($i = 0; $i < 10; $i++) {
$process = new Process('ls -lsa');
$process->run(function ($type, $buffer) {
if (Process::ERR === $type) {
echo 'ERR > '.$buffer;
} else {
echo 'OUT > '.$buffer;
}
});
$procs[$i] = $proc;
}