如何始终并行运行n个进程,而不等待之前的n个进程完成?

时间:2019-04-20 17:29:54

标签: python python-3.x parallel-processing multiprocessing

我想运行50种不同的方法。我有10个cpus可用,因此我只能同时运行10个进程。所以我运行了5次。但是,问题是前10个进程应该完成才能启动后10个进程,这增加了完成所需的时间。我想要的是9个进程正在运行时,一个新进程应立即启动,并始终运行10个进程。

我将我的50个班级分为5个不同的组并进行跑步。

group1 = [class1,class2 ...] group2 = [class11,class12 ..]

groups = [group1,group2,...,group5]

for group in groups:

    threads = []

        for x in group:
            threads.append(mp.Process(target= x().method(), args= (b,)))

        for thread in threads:
            thread.start()

        for thread in threads:
            thread.join()

1 个答案:

答案 0 :(得分:1)

您应该创建一个进程池并使用apply_async方法:

from multiprocessing import Pool
pool = Pool(processes=10) # start 10 worker processes
for arg in args:
  pool.apply_async(yourFunc, args = (arg, ))
pool.close()
pool.join()

https://docs.python.org/2/library/multiprocessing.html