我有一个简单的程序来运行8个进程,通过使用多处理程序可以显着减少脚本的运行时间,但是,我不确定应该将多少个进程最大化CPU使用率。目前,我的cpu是6核,只有1个物理cpu,因为它是VPS。 :
def spider1():
def spider2():
def spider3():
def spider4():
def spider5():
def spider6():
def spider7():
def spider8():
if __name__ == '__main__':
p1 = multiprocessing.Process(target=spider1,)
p2 = multiprocessing.Process(target=spider2,)
p3 = multiprocessing.Process(target=spider3,)
p4 = multiprocessing.Process(target=spider4, )
p5 = multiprocessing.Process(target=spider5, )
p6 = multiprocessing.Process(target=spider6, )
p7 = multiprocessing.Process(target=spider7, )
p8 = multiprocessing.Process(target=spider8, )
p1.start()
p2.start()
p3.start()
p4.start()
p5.start()
p6.start()
p7.start()
p8.start()
答案 0 :(得分:3)
如果要使用cpu的数量来计算要生成的进程数,请使用cpu_count查找cpu的数量,
psutil.cpu_count()
但是使用CPU利用率来计算产生的进程数可能是一种更好的方法,要检查CPU利用率,您可以执行类似的操作
import psutil
psutil.cpu_times_percent(interval=1, percpu=False)
这将为您提供cpu的使用情况,例如,您可以使用该信息来确定是否要生成新进程。密切注意内存并进行交换可能是一个好主意。
很有帮助。答案 1 :(得分:1)
对于建议,您必须提供有关用例的更多信息。 多重处理以及相关的通信原语(例如队列)会带来开销。此外,使用VPS对此类问题进行推理会引入许多可能会严重扭曲实验结果的变量。
N
,然后乘以1.0
开头的因数,它随独立的IO负载而增加,而渐近地减小为{{1 }}与任务的相关IO负载。 这意味着,例如,如果您的并行任务争用一个有限的资源(例如旋转的硬盘),则将并行性(锁定成本)和并发性(按寻道时间切换任务成本)降低到一个。 没有IO给您留下可以完全使用的核心数量。 对于独立的IO,此规则将导致您增加并行运行的任务数,因此当一个CPU内核执行IO操作时,CPU内核可以切换到另一任务。