2015-08-09 5 views
1

Я написал задачу Laravel, которая считывает данные из db, вызывает сценарий оболочки для обработки данных и сохраняет результаты в db. Задачи ставятся в очередь очень быстро, и в очереди всегда есть несколько задач. Я заметил, что задачи не выполняются один за другим, но вместо этого выполняется несколько задач одновременно. Это, во всяком случае, хороший принцип, но кажется, что сценарий оболочки, который я называю (который является сторонним, и я не могу его изменить) не является потокобезопасным и создает проблемы при одновременном вызове несколькими задачами. Когда я выполняю функцию задачи синхронно, как часть моего основного процесса, все работает плавно.Очереди Laravel - ограничение числа одновременных задач

Что я хотел бы знать, так это то, что можно сказать, что очередь Laravel обрабатывает одну задачу за раз, потому что я все еще хочу разделить это задание от основной обработки, но также должен избегать этих ошибок. Я нахожусь на Laravel 5, используя метод очереди по умолчанию «sync».

ответ

1

О задачах, выполняемых одновременно, вы пробовали добавить withoutOverlapping? http://laravel.com/docs/5.1/scheduling#preventing-task-overlaps

Если вы используете закрывающий вызов, вы также должны добавить name

Например:

$schedule->call(function() { 
    DB::table('users')->insert([ 
     'user_id'  => '3', 
     'name'   => 'anton' 
    ]); 
})->everyHour() 
    ->name('nyanpasu') 
    ->withoutOverlapping(); 
+0

хорошо, я называю свою работу, как этот 'Queue :: pushOn ('tagger', новый TaggerJob ($ idFeed)); 'это задание в очереди, а не задание laravel, вызываемое периодически, возможно, я не очень хорошо выражал то, что я пытаюсь сделать. Однако вариант, который вы упоминаете для предотвращения перекрытия задачи, - это еще одна вещь, которую я искал, поэтому этот ответ очень полезен, спасибо вам большое! –

Смежные вопросы