我有一个简单的程序来运行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()发布于 2018-09-13 18:16:08
如果您想使用cpu数来计算要派生的进程数,请使用cpu_count查找cpu数,
psutil.cpu_count()但是使用CPU利用率来计算衍生进程的数量可能是一种更好的方法,要检查CPU利用率,您可以执行以下操作:
import psutil
psutil.cpu_times_percent(interval=1, percpu=False)这将为您提供cpu使用率,例如,您可以使用该信息来决定是否要生成一个新进程。关注内存和交换也可能是个好主意。
我认为这个答案可能会对你有用,Limit total CPU usage in python multiprocessing
发布于 2018-09-13 18:44:43
对于推荐,你必须提供更多关于你的用例的信息。多处理和相关的通信原语(如队列)引入了开销。此外,使用VPS对这样一个问题进行推理会引入许多变量,这些变量可能会严重扭曲实验结果。
如果你还没有了解并发性和并行性,already.
N核的数量乘以一个从1.0开始的因子,这个因子随着独立IO负载的增加而增加,随着任务的依赖IO负载而逐渐减少到1/N。这意味着,例如,如果您的并行任务争夺有限的资源,如旋转的硬盘,请将并行性(锁定成本)和并发性(任务切换成本按寻道时间)降低到1。没有IO为您留下可在完全刻录时使用的内核数量。对于独立的IO,此规则将导致您增加并行运行的任务数量,因此当一个任务运行到IO操作中时,CPU核心可以切换到另一个任务。
https://stackoverflow.com/questions/52311339
复制相似问题