Все, я пытаюсь «заставить» рабочих RQ выполнять одновременное использование supervisord. Моя настройка настройки супервизора, похоже, работает нормально, так как на rq-dashboard отображаются 3 рабочих, 3 PID и 3 очереди (по одному для каждого рабочего/PID). Настройка Supervisord следующим образом (показывая только настройки работника 1, более 2 рабочих определены ниже этого):RQ параллелизм с supervisord?
[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
Вопрос в том, когда я посылаю 3 рабочих мест одновременно, общее время Запускаемая x3 для одной задачи (а именно, общее время линейно с количеством задач, это масштабируется до x4, x5 и т. д.). Кажется, что нет параллелизма. Я также реализовал примитивную балансировку нагрузки, отправив новые задания в очередь с минимальными начальными + заданиями в очереди, которые отлично работают (рабочие задания распределяются равномерно между очередями).
Почему эта настройка не разрешает параллелизм?
Какие-либо соображения относительно установки у меня отсутствуют?
Обратите внимание, что пакет rq-gevent-worker (который работал с более ранним w.r.t. concurrency/RQ) больше не доступен по мере перехода на PY3, а сам gevent еще не поддерживается на PY3. Но это дает мне понять, что параллелизм возможен.
Возможно, вы загружаете все задания одному рабочему/очереди? –
nah, я протестировал это; во-первых, каждый рабочий контролирует одну очередь, то, что я делаю, равномерно распределяет задания на три очереди (опять же, проверяется на работу), оттуда каждый рабочий должен обрабатывать только свои собственные задания. Но это не делается одновременно, так как время заканчивается линейно с количеством заданий. Если работает параллелизм, можно получить общее время = # Jobs/# Workers, предполагая, что задания распределены равномерно между очередями/рабочими. –
Я использую 'supervisord' для запуска нескольких rqworkers параллельно. (Это не «сила», кстати, это [предполагаемый шаблон] (http://python-rq.org/patterns/supervisor/) в 'python-rq'.) С другой стороны, запись ваш собственный алгоритм балансировки нагрузки - это анти-шаблон: это именно то, что 'python-rq' делает для вас. Если вы хотите разделить работу между 3 работниками, то все они должны слушать одну и ту же очередь. Вы можете удалить 2 из ваших конфигурационных блоков супервизора и изменить 'numprocs' на' 3'. В противном случае информации недостаточно, чтобы знать, что не так: сколько процессоров? это привязка задачи IO или ЦП? –