【发布时间】:2018-04-12 08:01:52
【问题描述】:
我们在开发机器上使用 Python 2.7(由许多独立的并行进程组成)提交大型 CPU 密集型作业,这些作业一次持续数天。当这些作业与大量进程一起运行时,机器的响应速度会大大降低。理想情况下,我想在我们开发代码时限制白天可用的 CPU 数量,并在夜间尽可能高效地运行尽可能多的进程。
Python 多处理库允许您在启动池时指定进程数。有没有办法在每次启动新任务时动态更改这个数字?
例如,允许 20 个进程在 19-07 小时内运行,10 个进程在 07-19 小时内运行。
一种方法是检查使用大量 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 实现是不可行的)。
【问题讨论】: