为什么当进程数大于python中CPU中的线程总数时,应用程序通过使用更多进程来运行得更快? 这是代码
import time
from concurrent.futures import ProcessPoolExecutor
def wait():
time.sleep(1)
start = time.time()
#create the process pool
with ProcessPoolExecutor(max_workers=40) as executor:
future = []
for _ in range(400):
future.append(executor.submit(wait))
start2 = time.time()
future_res = []
for i,v in enumerate(future):
future_res.append(v.result())
print(time.time()-start)
print(time.time()-start2)
其输出是:
10.364367246627808
9.99793791770935
这是否意味着如果我使用越来越多的进程,应用程序将运行得越来越快?
答案 0 :(得分:2)
给定的wait
函数不会消耗任何有趣的CPU周期;它仅与调度程序交互。较高的并发级别将使许多重叠的睡眠更快地完成就不足为奇了。在这里,您选择了num_tasks = 400
。对于较大的值,您的完成时间将趋向于num_tasks / max_workers
的比率。这绝对不是绑定CPU的工作负载会遇到的行为。
如果您将不同的工作负荷作为“实际”问题,请在一个单独的问题中进行询问,并说明该问题主要是受CPU,I / O还是网络限制。