如何在不等待一个结束执行的情况下执行多个工匠命令?

p01*_*ath 5 php laravel laravel-5 laravel-artisan

我有大量数据需要快速处理并充分利用我的服务器。所以,我创建了一个父工匠命令和一个子工匠命令

父工匠命令:从数据库中获取值,进行各种计算,将数据分成块并使用以下代码执行子工匠命令的多个实例。

foreach($arrayOfData as $chunk){ // $arrayOfData is an array of Chunks
    $this->call('process:data',[
        'data' => $chunk  // Chunk is an array containing data
    ]);

    $this->info('Chunk Processed');
}
Run Code Online (Sandbox Code Playgroud)

但它等待一个实例停止执行,这意味着它不会同时执行我想要的多个子工匠命令实例!我知道以这种方式调用它会等待子工匠命令的一个实例停止执行。有什么方法可以执行多个实例而child artisan command无需等待一个实例停止执行?

我已经搜索了不同的方法来做到这一点,我可以使用exec()类似的函数执行子工匠命令,但它也会返回一些我的代码将等待的退出代码。

通过一次只执行 2 个实例,我可以将处理数据所需的时间除以 2。我想一次执行 3 个实例!有没有办法做到这一点?

更多信息

子工匠命令:获取数据数组并对其进行处理。基本上,它更新数据库中给定数据的一些信息。

Ale*_*nin 4

来自文档

使用queueArtisan 外观上的方法,您甚至可以对 Artisan 命令进行排队,以便队列工作人员在后台处理它们。在使用此方法之前,请确保您已配置队列并正在运行队列侦听器

foreach($arrayOfData as $chunk){ // $arrayOfData is an array of Chunks
    $this->queue('process:data',[
        'data' => $chunk  // Chunk is an array containing data
    ]);
}
Run Code Online (Sandbox Code Playgroud)

如果您不熟悉队列,请从这里开始。