#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. Одна очередь выполняет задания одно за другим, считывая их из базы данных или любого другого драйвера, для работы с которым вы настроили свою очередь.