当进程数大于python中CPU的线程总数时,为什么应用程序可以运行得更快?

时间:2018-10-18 12:14:28

标签: python python-3.x multithreading multiprocessing

为什么当进程数大于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

这是否意味着如果我使用越来越多的进程,应用程序将运行得越来越快?

1 个答案:

答案 0 :(得分:2)

给定的wait函数不会消耗任何有趣的CPU周期;它仅与调度程序交互。较高的并发级别将使许多重叠的睡眠更快地完成就不足为奇了。在这里,您选择了num_tasks = 400。对于较大的值,您的完成时间将趋向于num_tasks / max_workers的比率。这绝对不是绑定CPU的工作负载会遇到的行为。

如果您将不同的工作负荷作为“实际”问题,请在一个单独的问题中进行询问,并说明该问题主要是受CPU,I / O还是网络限制。