我正在尝试在一定数量的内核上并行执行一些非常耗时的任务。我的目标是尽可能利用服务器资源。 CPU总数为20,但是要执行的任务数量却更多(例如100)。
每个任务的运行时间不同,因此下面的代码为一定数量的内核闲置而没有工作提供了机会。
import multiprocessing as mp
def some_task(*args):
# Something happening here
pass
cpu_count = mp.cpu_count()
p = mp.Pool(cpu_count)
n_thread = 1
for something in somethings:
p.apply_async(some_task, args=(something, ))
if n_thread == cpu_count:
p.close()
p.join()
p = mp.Pool(cpu_count)
n_thread = 1
continue
n_thread += 1
p.close()
if n_thread != 1:
p.join()
当活动作业的数量少于CPU的数量时,如何编程将启动新任务的代码?