我目前有多个python-rq工作线程并行地执行队列中的作业。每个作业还使用python多处理模块。
作业执行代码简单如下:
from redis import Redis
from rq import Queue
q = Queue('calculate', connection=Redis())
job = q.enqueue(calculateJob, someArgs)calculateJob是这样定义的:
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因此,假设在处理作业时,所有核心都会自动被该作业利用。如果第一个作业已经在使用所有内核,那么并行处理另一个作业的另一个worker如何执行它的作业?
发布于 2021-07-17 07:52:30
这取决于您的系统如何处理进程。就像打开一个视频+5个进程并不能完全冻结你的6核计算机一样。每个工作进程都是一个新的进程。(实际上是一个流程的分叉)。您可以将每个作业放在一个队列中,让rq通过产生多个工作进程来处理多进程,而不是在作业内部进行多进程处理。
https://stackoverflow.com/questions/60456830
复制相似问题