Я использую RQ для реализации очереди заданий в кластере, где задания управляются и запускаются с Python. Рабочие RQ запускаются через mpirun
, после чего следует программа Python, которая добавляет задания в очередь.
Я заметил, что когда у меня есть только один процесс, поэтому единственный RQ-работник находится в том же процессе, что и программа, существует значительная задержка. Это может быть связано с тем, что у меня есть большой объем данных о redis-server
, к которым они имеют общий доступ.
В тестовом случае с одним заданием использование двух процессов в целом ускоряется. Поэтому я думаю, что было бы лучше иметь единый процесс для программы (мастер), который просто помещает задания в очередь для рабочих.
В настоящее время у меня есть
mpirun -np $NUM_WORKERS -machinefile $confile rq worker $WORKER_ID -u $REDIS_URL
python3 master_program.py
Мой главный вопрос: как я могу изменить команду mpirun
для запуска рабочих RQ на 2-ом процессе, обеспечив master_program
единственным использование первого?
Вторичный вопрос: почему это намного медленнее, когда работник RQ разделяет процесс с мастер-программой? В ожидании результата от работника RQ мастер больше ничего не делает.