RQ параллелизм с супервизором?

Все, я пытаюсь "заставить" сотрудников RQ работать параллельно, используя supervisord. Моя настройка супервизора установки, кажется, работает нормально, так как rq-dashboard показывает 3 рабочих, 3 PID и 3 очереди (по одной на каждого работника /PID). Настройка супервизора выглядит следующим образом (показаны настройки только для рабочего 1, под ним определено еще 2 рабочих):

[program:rqworker1]
command = rqworker 1 
process_name = rqworker1-%(process_num)s
numprocs = 1 
user = username 
autostart = True
stdout_logfile=/tmp/rqworker1.log
stdout_logfile_maxbytes=50MB

RQ работники, работающие под надзором

Проблема заключается в том, что когда я отправляю 3 задания одновременно, общее время выполнения составляет х3 от времени одной задачи (а именно, общее время линейно с количеством задач, оно масштабируется до х4, х5 и т. Д.). Кажется, нет параллелизма. Я также реализовал примитивную балансировку нагрузки, посылая новые задания в очередь с минимальным количеством запущенных + поставленных в очередь заданий, что прекрасно работает (наблюдается равномерное распределение заданий между очередями).

Почему эта настройка не разрешает параллелизм?

Какие-нибудь соображения относительно установки, которую я пропускаю?

Обратите внимание, что пакет rq-gevent-worker (который отлично работал раньше при параллельном /RQ) больше не доступен, поскольку я перешел на PY3, а сам gevent еще не поддерживается на PY3. Но это дает мне понять, что параллелизм возможен.

1 ответ

Решение

Изменение моего комментария сверху в ответ...

С помощью supervisord запустить несколько rqworker параллельные процессы является намеченным паттерном в python-rqтак что не беспокойтесь, что вы "заставляете" это. У вас действительно есть правильная идея.

С другой стороны, написание собственного алгоритма балансировки нагрузки является анти-паттерном: это именно то, что python-rq делает для вас.

Если вы хотите разделить работу между тремя работниками, то все они должны слушать одну и ту же очередь. Попробуйте удалить два из ваших блоков конфигурации супервизора, и в одном оставшемся блоке измените numprocs в 3, Если вы быстро отправите три задания в эту очередь, вы должны увидеть одновременное выполнение трех работников.

Другие вопросы по тегам