Laravel несколько задач одновременно - PullRequest
0 голосов
/ 25 апреля 2018

Мне нужно обработать несколько файлов изображений из каталога (каталог S3), процесс должен прочитать имя файла (идентификатор и тип), которое хранится в имени файла (001_4856_0-P-0-A_.jpg), этот файл сохраняется в момент запуска процесса (я использую cron и schedule, он отлично работает) цель процесса - сохранить информацию в базе данных.

У меня процесс работает, он отлично работает, но моя проблема в количестве файлов в каталоге, потому что каждая секунда добавляет намного больше файлов в каталог, время, затрачиваемое на процесс, составляет около 0,19 с для файла , но количество файлов огромно, добавляется около 15 000 в минуту, поэтому я думаю, что несколько одновременных процессов (примерно 10-40 раз) одного и того же исходного процесса могут сделать эту работу.

Мне нужен совет или идея,

Сначала узнайте, как запустить несколько процессов одновременно для одного исходного процесса.

Во-вторых, как получить только невыбранные имена файлов, потому что процесс принимает имена файлов с помощью:

  $recibidos = Storage::disk('s3recibidos');

  if(count($recibidos) <= 0)
  {
    $lognofile = ['Archivos' => 'No hay archivos para procesar'];
    $orderLog->info('ImagesLog', $lognofile);
  }else{
    $files = $recibidos->files();

    if(Image::count() == 0)
    {
      $last_record = 1;
    } else{
        $last_record = Image::latest('id')->pluck('id')->first()+1;
    }
    $i=$last_record;
    $fotos_sin_info = 0;
    foreach($files as $file)
    {
      $datos = explode('_',$file);
      $tipos = str_replace('-','',$datos[2]);
      Image::create([
        'client_id' => $datos[0],
        'tipo' => $tipos,
      ]);
      $recibidos->move($file,'/procesar/'.$i.'.jpg');
      $i++;
    }

но я так и не понял, как извлечь только невыбранные.

Спасибо за ваши комментарии.

1 Ответ

0 голосов
/ 25 апреля 2018

Использование многопоточного программирования в php возможно и обсуждалось на этом вопросе. Как можно использовать многопоточность в PHP-приложениях .Однако это, как правило, не самый очевидный выбор для стандартных приложений.Решение для вашей ситуации будет зависеть от конкретного варианта использования.

Рассматривали ли вы решение с использованием очередей?https://laravel.com/docs/5.6/queues

Или планировщик?https://laravel.com/docs/5.6/scheduling

...