【问题标题】:Laravel - How to schedule the same artisan task to run in parallel?Laravel - 如何安排相同的工匠任务并行运行?
【发布时间】:2016-06-07 09:41:54
【问题描述】:

我正在尝试安排相同的工匠任务在 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 任务同时开始并行运行的最佳方式是什么?谢谢。

【问题讨论】:

    标签: php laravel parallel-processing


    【解决方案1】:

    使用 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

    是的,这不是“真正的”并行,但它运行队列的速度确实快了很多!另外,检查你有多少内存,你可能想把numprocs 调低到 4。

    编辑:一些格式

    【讨论】:

      猜你喜欢
      • 2018-10-06
      • 1970-01-01
      • 2021-06-15
      • 2016-08-04
      • 2014-08-30
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      相关资源
      最近更新 更多