Laravel - 如何安排相同的工匠任务并行运行?

时间:2016-06-07 09:41:55

标签: php laravel parallel-processing

我正在尝试安排相同的工匠任务在Laravel 5.2中并行运行。首先,我将$schedule->command置于Kernel.php中的for循环中:

    for ($j = 0; $j < 10; $j++) {
        $schedule->command('foo:bar --option=' . $j)
            ->dailyAt("1:00");
    }

我发现foo:bar实际上是以串行的方式逐个运行。下一个命令在前一个命令完成时开始。

然后我按如下方式更改了代码,

    $schedule->call(function(){
        for ($j = 0; $j < 10; $j++) {
            Artisan::queue('foo:bar', [
                '--option' => $j
            ]);
        }
    })->dailyAt(1:00);

当我使用ps aux检查Ubuntu时,我看到了两个任务而不是10个任务。我错过了什么吗?从同一时间开始,安排同一个Artisan任务并行运行的最佳方法是什么?感谢。

1 个答案:

答案 0 :(得分:2)

使用Supervisor管理排队任务,您可以一次运行多个任务。经过一个痛苦的下午看完电子邮件后,我在排队后每隔一秒就学到了这一点!

我的conf文件(在/etc/supervisor/conf.d/{appName}.conf中)

[program:mylaravelappnamequeue]
command=php /var/www/html/mylaravelappname/artisan queue:listen --tries=1
directory=/var/www/html/mylaravelappname
stdout_logfile=/var/www/html/mylaravelappname/storage/logs/supervisord.log
redirect_stderr=true
autostart=true
autorestart=true
numprocs = 10
process_name = %(program_name)s%(process_num)s

信用到期日:https://laracasts.com/discuss/channels/general-discussion/how-to-speed-up-queues

是的,这不是“真正的”并行,但它确实更快地运行队列!另外,检查你有多少RAM,你可能想要将numprocs降低到4级。

编辑:一些格式