Laravel的withChain队列,无法使其顺序运行

时间:2019-06-05 10:18:04

标签: php laravel

我想做一连串的工作,假设我要处理100个视频,使用此代码,我希望DownloadThumbnail执行一次,然后将球传给DownloadSource,然后到UploadToS3ConvertVideoToH264

使用队列时,我看到的是首先完成所有DownloadThumbnail,然后完成所有DownloadSource等,这不是我想要的。按顺序执行作业的最佳方法是什么?谢谢!

foreach($hundreds as $video){

    $Tasks = [];

    //takes few seconds
    if(!$video->thm){
        $Tasks[] = new DownloadThumbnail($video);
    }

    //takes 10 minutes
    if(!$video->dl){
        $Tasks[] = new DownloadSource($video);
    }

    //takes 10 minutes
    if(!$video->s3){
        $Tasks[] = new UploadToS3($video);
    }

    //takes 5 minutes
    if($video->transcoded < 3){
        $Tasks[] = new ConvertVideoToH264($video);
    }


    if(!empty($Tasks)){
        $first_job = array_shift($Tasks);
        $first_job::withChain($Tasks)->dispatch($video)->allOnQueue('processvideos');
    }

}

0 个答案:

没有答案