php – 如何在不等待结束执行的情况下执行多个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');
}

但它等待一个实例停止执行,这意味着它不会立即执行我想要的多个子工匠命令实例!我知道以这种方式调用它将等待一个child artisan命令的实例停止执行.有没有办法可以执行多个子artisan命令实例而无需等待一个实例停止执行?

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

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

更多信息

Child artisan命令:获取数据数组并对其进行处理.基本上,它会更新数据库中给定数据的一些信息.

解决方法:

the docs开始:

Using the queue method on the Artisan facade, you may even queue Artisan commands so they are processed in the background by your queue workers. Before using this method, make sure you have configured your queue and are running a queue listener

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

如果您不熟悉队列,请从here开始.

上一篇:mysql – Laravel Migration DELIMITER


下一篇:Laravel – php工匠制作:模型项目不起作用