我想做一连串的工作,假设我要处理100个视频,使用此代码,我希望DownloadThumbnail
执行一次,然后将球传给DownloadSource
,然后到UploadToS3
和ConvertVideoToH264
。
使用队列时,我看到的是首先完成所有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');
}
}