Может ли работник выполнять более одного задания?

#laravel #queue #jobs #supervisord

#laravel #очередь #Вакансии #супервизор

Вопрос:

Я создаю систему, которая должна обрабатывать много данных. Итак, я разделяю 30 заданий, которые выполняют одну и ту же функцию, но разные данные. Мне интересно, как дела у работников и рабочих мест. Я использую larvel 6 and supervisor . Когда я устанавливаю numprocs=1 и проверяю таблицу заданий, я вижу 9 of 30 jobs have attempts=1 . Если это так, я думаю, что 9 заданий выполняются 1 рабочим. Когда я устанавливаю numprocs=2 , я вижу 10 of 30 jobs have attempts=1 . Даже если работник выполняет 9 заданий, если у меня 2 работника, это должно 18 of 30 jobs have attempts=1 быть, не так ли?
Так разве не один работник выполняет одно задание?
Это моя конфигурация супервизора.

 [program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=/bin/php /var/www/test-dir/artisan queue:work --sleep=2 --timeout=3000 --daemon
autostart=true
autorestart=true
user=nginx
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/test-dir/worker.log
stopwaitsecs=3600
  

Комментарии:

1. Это была моя вина. Старые 8 рабочих не были каким-то образом убиты, и они все еще работали. Вот почему запущено 9 заданий, в то время как у меня только один работник.

Ответ №1:

Вы можете использовать разные очереди заданий для разных типов заданий, которые у вас могут быть. Смотрите, как это сделать здесь — Документы Laravel об очередях .

Вот документация по настройке супервизора. numprocs опция просто сообщает серверу, сколько рабочих очередей нужно запустить. Возможно, вы можете попытаться настроить несколько рабочих laravel и объединить их с разными очередями, но в целом, я думаю, вы мало что можете сделать, чтобы ускорить процесс. В конце концов, рабочий очереди laravel — это просто процесс, который выполняется в вашей системе. Следовательно, это может зависеть от системных спецификаций, если оно может выполняться параллельно.

Не существует фиксированного количества заданий, которые будет выполнять одна очередь. Очередь обработает все, что находится в таблице заданий. Если задание выполнено успешно, оно будет удалено из таблицы заданий, если нет, оно переместит его в неудачные задания.

Комментарии:

1. Похоже, ваш ответ не смог ответить на мой вопрос. Что я хотел бы знать, так это то, что одна очередь может запускать несколько заданий одновременно или нет. Но это была моя вина. На моем сервере все еще работают еще 8 рабочих, и именно поэтому я сомневаюсь в этом.

2. Одна очередь выполняет задания одно за другим, считывая их из базы данных или любого другого драйвера, для работы с которым вы настроили свою очередь.