Я хотел бы создать цепочку заданий, скажем, у меня есть 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');
}
}