Laravel queues — ограничить количество одновременных задач

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

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]