gpt4 book ai didi

php - laravel如何执行多个后台进程?

转载 作者:可可西里 更新时间:2023-10-31 23:14:42 28 4
gpt4 key购买 nike

首先,我了解队列并且现在对队列有很好的体验。队列的问题是,它是一个队列。我想在后台同时执行多个功能或命令。队列会将第二个命令或函数保留在队列中,并在第一个完成执行后执行!

例如,我有一个包含约 3,000,000 条记录的表,我想更快地处理它们。我能做的是将它们分成 5 个相等的 block 并总共执行 5 个命令,这样我就可以利用我的 CPU 以及处理数据的速度提高 5 倍。

那么,我如何使用 Laravel 做到这一点?队列不会工作,因为它们一个接一个地执行任务。如果您的想法是创建多个 5 多个队列和主管来完成,我认为这不是标准的方法。

关于在这种情况下可以做什么的任何想法?

最佳答案

最后,我找到了解决办法。这非常非常容易。所以,这是它的工作原理。

首先,我把记录​​分成chunk的个数(比如5个chunk,它会把300万个item分成5个chunk,每个chunk有600k个item)

然后,我可以将命令推送到我为 block 即时创建的队列,并使用 --once 选项只为该队列执行一次队列工作程序。为了便于理解,这是我正在使用的代码。

$chunk_id = 0;
foreach($chunks as $chunk){
// Adding chunk to queue
Artisan::queue('process:items',[
'items' => $chunk,
])->onQueue('processChunk'.$chunk_id);

// Executing queue worker only once
exec('php artisan queue:work --queue=processChunk'.$chunk_id.' --once > storage/logs/process.log &');

$chunk_id++;
}

使用 exec 命令,我们正在为特定 block 创建的特定队列执行队列工作程序。此外,我们在命令末尾添加了 &,强制命令在操作系统级别的后台执行。

这是可以做到的。我测试了它,它工作顺利!还有什么需要改进的地方,或者使用这种方法有什么缺点吗?

关于php - laravel如何执行多个后台进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48987559/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com