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

标签 php laravel laravel-5 supervisord

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

例如,我有一个包含约 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/

相关文章:

java - PHP 帖子 Android 帖子

PHP,如何轻松地将索引数组转换为关联数组

php - 调用返回后,PHP 是否垃圾收集函数范围的对象?

php - 设置没有溢出的日期(使用 PHP Carbon)

laravel - 如何从模型中获取表列名作为数组

php - 在 Ubuntu 中创建 Laravel 应用程序时出现错误

jquery - 为什么此代码不适用于 laravel 5 中的动态轮播?

php - Laravel 5 需要使用 Apache 虚拟主机的 index.php

php - 使用 UUID 作为 Laravel 5 的主键

php - 检索模板 joomla 2.5 中的模块参数设置