我试图使用多处理运行具有不同值的函数的1200次迭代。是否有一种方法可以在函数本身内设置处理器的优先级和亲和性?下面是我正在做的一个例子:
with multiprocessing.Pool(processes=3) as pool:
r = pool.map(func, (c for c in combinations))
我希望这3个进程中的每一个都使用psutil具有高优先级,并指定cpu_affinity。虽然我可以在func
中使用:psutil.Process().HIGH_PRIORITY_CLASS
,但我应该如何为三个处理器指定不同的亲缘关系?
我将使用mp中的初始化函数。池:
#same prio for each child
def init_priority(prio_level):
set_prio(prio_level)
if __name__ == "__main__":
with Pool(nprocs, init_priority, (prio_level,)) as p:
p.map(...)
#Different prio for each child: (this may not be very useful
#because you cannot choose which child will accept each "task").
def init_priority(q):
prio_level = q.get()
set_prio(prio_level)
if __name__ == "__main__":
q = mp.Queue()
for _ in range(nprocs): #put one prio_level for each process
q.put(prio_level)
with Pool(nprocs, init_priority, (q,)) as p:
p.map(...)
如果你需要有一些高优先级的子进程和一些低优先级的子进程,并且需要能够很容易地区分它们,我会跳过mp.Pool
,只使用你自己的Process
。