我们在Python 2.7上提交大型CPU密集型作业(包含许多独立并行进程),这些作业持续数天。当这些作业使用大量进程运行时,机器的响应速度会显著降低。理想情况下,在开发代码时,我希望限制可用的CPU数量,并在晚上尽可能高效地运行尽可能多的进程。
Python multiprocessing库允许您在初始化池时指定进程数。是否有一种方法可以在每次启动新任务时动态更改此数字?
例如,在19-07小时内允许运行20个进程,在07-19小时内允许运行10个进程。
其中一种方法是使用占用大量CPU的活动进程数进行检查。以下是我希望它能够运行的方式:
Python multiprocessing库允许您在初始化池时指定进程数。是否有一种方法可以在每次启动新任务时动态更改此数字?
例如,在19-07小时内允许运行20个进程,在07-19小时内允许运行10个进程。
其中一种方法是使用占用大量CPU的活动进程数进行检查。以下是我希望它能够运行的方式:
from multiprocessing import Pool
import time
pool = Pool(processes=20)
def big_task(x):
while check_n_process(processes=10) is False:
time.sleep(60*60)
x += 1
return x
x = 1
multiple_results = [pool.apply_async(big_task, (x)) for i in range(1000)]
print([res.get() for res in multiple_results])
但我需要编写“check_n_process”函数。
还有其他解决这个问题的想法吗?
(代码需要在Python 2.7中运行 - 不可行的bash实现)。
Pool(1000)
将启动1000个Python进程。 - milahu