我正在使用RQ在集群上实现作业队列,其中作业是使用 Python 管理和运行的。RQ 工作人员通过 启动mpirun,然后是一个将作业添加到队列的 Python 程序。
我注意到当我只有一个进程时,所以唯一的 RQ 工作人员与程序在同一个进程上,会有很大的延迟。这可能是因为我有大量关于redis-server他们共享访问的数据。
在具有单个作业的测试用例中,使用 2 个进程总体上会加快速度。因此,我认为最好有一个程序(主)进程,它只是将作业放在工作人员的队列中。
目前我有
mpirun -np $NUM_WORKERS -machinefile $confile rq worker $WORKER_ID -u $REDIS_URL
python3 master_program.py
我的主要问题是:如何修改mpirun命令以在第 2-N 个进程上启动 RQ 工作人员,确保master_program唯一使用第一个?
第二个问题:为什么当 RQ worker 与主程序共享进程时,它会慢得多?在等待 RQ worker 的结果时,master 没有做任何其他事情。