【问题标题】:Laravel : Task Scheduling [ In Parallel ]Laravel:任务调度[并行]
【发布时间】:2017-07-20 14:33:44
【问题描述】:

我有多项任务需要每隔一两个小时完成一次。所有这些都是通过 Laravel 使用以下命令作为 cron 作业安排的

$schedule->command('email:notifications1')
            ->cron('15 * * * * *');
$schedule->command('email:notifications2')
            ->cron('15 * * * * *');
$schedule->command('email:notifications3')
            ->cron('15 * * * * *');

问题: 上述所有任务都非常耗时,从结果来看,这些任务似乎没有并行运行。每个任务都在前一个任务结束后运行。

要求 我怎样才能并行运行它们?我希望在时钟滴答指定时间后立即(并行)执行所有任务。

Laravel 版本 5

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    如果您将runInBackground() 添加到链中,您可以轻松地运行多个并行命令。 像这样:

    $schedule->command('email:notifications1')
                ->cron('15 * * * * *')->runInBackground();
    $schedule->command('email:notifications2')
                ->cron('15 * * * * *')->runInBackground();
    $schedule->command('email:notifications3')
                ->cron('15 * * * * *')->runInBackground();
    

    这会在后台创建一个新进程,因此调度程序不必等到命令执行。这甚至不会干扰withoutOverlapping() 方法,因为它适用于互斥文件。

    现在您还可以将命令置于版本控制中。

    【讨论】:

      【解决方案2】:

      由于 PHP 的限制,Laravel 调度器一次只能运行一个命令。

      但是,您可以将 cronjob 直接添加到您的 crontab 文件中,这样它们将在不同的进程中并行执行。

      15 * * * * * php /path/to/artisan email:notifications1
      15 * * * * * php /path/to/artisan email:notifications2
      15 * * * * * php /path/to/artisan email:notifications3
      


      解决此问题的另一种方法是让作业在另一个时间开始。因为 cron 作业每分钟都会启动一个新的 php 进程,所以它们不会相互影响。

      例如:

      $schedule->command('email:notifications1')
                  ->cron('5 * * * * *');
      $schedule->command('email:notifications2')
                  ->cron('10 * * * * *');
      $schedule->command('email:notifications3')
                  ->cron('15 * * * * *');
      

      【讨论】:

      • 第一个选项对我的情况很有效。第二个选项没有按预期工作。感谢您的帮助。
      • 第一个选项剥夺了您控制计划版本和代码版本的能力
      • 如果让命令在后台运行,Laravel 可以一次运行多个命令。
      猜你喜欢
      • 2020-11-06
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 2019-02-15
      • 2021-10-22
      • 1970-01-01
      • 2021-10-09
      • 2020-02-25
      相关资源
      最近更新 更多