如何在不等待一个命令结束执行的情况下执行多个 artisan 命令?
How to execute multiple artisan commands without waiting for one to end execution?
我有大量数据需要快速处理并充分利用我的服务器。所以,我创建了一个 parent artisan 命令 和一个 child artisan 命令 .
Parent artisan command:从数据库中获取值,进行各种计算,将数据分成块并执行[的多个实例=28=]child 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 命令的多个实例!我知道以这种方式调用它会等待 child artisan 命令的一个实例停止执行。有什么方法可以执行 child artisan command
的多个实例而无需等待一个实例停止执行?
我已经搜索了不同的方法来执行此操作,我可以使用 exec()
和类似函数执行 child artisan 命令,但它也会 return 一些退出代码我的代码将等待它。
通过一次只执行 2 个实例,我可以将处理数据的时间除以 2。我想一次执行 3 个实例!有什么办法吗?
更多信息
Child artisan command: 获取数据数组并进行处理。基本上,它会为给定的数据更新数据库中的一些信息。
来自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开始。
我有大量数据需要快速处理并充分利用我的服务器。所以,我创建了一个 parent artisan 命令 和一个 child artisan 命令 .
Parent artisan command:从数据库中获取值,进行各种计算,将数据分成块并执行[的多个实例=28=]child 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 命令的多个实例!我知道以这种方式调用它会等待 child artisan 命令的一个实例停止执行。有什么方法可以执行 child artisan command
的多个实例而无需等待一个实例停止执行?
我已经搜索了不同的方法来执行此操作,我可以使用 exec()
和类似函数执行 child artisan 命令,但它也会 return 一些退出代码我的代码将等待它。
通过一次只执行 2 个实例,我可以将处理数据的时间除以 2。我想一次执行 3 个实例!有什么办法吗?
更多信息
Child artisan command: 获取数据数组并进行处理。基本上,它会为给定的数据更新数据库中的一些信息。
来自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开始。