我目前有多个python-rq worker从队列中并行执行作业。每个作业还利用python多处理模块。
作业执行代码就是这样:
from redis import Redis
from rq import Queue
q = Queue('calculate', connection=Redis())
job = q.enqueue(calculateJob, someArgs)
computeJob的定义如下:
import multiprocessing as mp
from functools import partial
def calculateJob (someArgs):
pool = mp.Pool()
result = partial(someFunc, someArgs=someArgs)
def someFunc(someArgs):
//do something
return output
因此,大概在处理作业时,该作业会自动利用所有内核。如果第一个作业已经利用了所有核心,那么另一个并行处理另一个作业的工作人员将如何执行其工作?
答案 0 :(得分:0)
这取决于您的系统如何处理进程。就像打开视频 + 5 个以上的进程不会完全冻结您的 6 核计算机一样。每个工人都是一个新的进程。 (真的是一个进程的分支)。您可以将每个作业放在一个队列中,让 rq 通过产生多个工作器来处理多处理,而不是在作业内部进行多处理。