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 个实例!有没有办法做到这一点?
更多信息
子工匠命令:获取数据数组并对其进行处理。基本上,它更新数据库中给定数据的一些信息。
来自文档:
使用
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)
如果您不熟悉队列,请从这里开始。
| 归档时间: |
|
| 查看次数: |
2234 次 |
| 最近记录: |