进程池、线程池

进程池vs线程池

为什么要用“池”:
池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务

池子内什么时候装进程:并发的任务属于计算密集型
池子内什么时候装线程:并发的任务属于IO密集型
concurrent:并发的,一致的,同时发生的  Executor执行者 
#进程池
from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
import time,os,random

def task(x):
    print('%s 接客' %os.getpid())
    time.sleep(random.randint(2,5))
    return x**2


if __name__ == '__main__':
    # p=ProcessPoolExecutor(3) # 不指定默认开启的进程数是cpu的核数
    # print(os.cpu_count())查看CPU的核数
    p=ProcessPoolExecutor(max_workers=2) # 默认开启的进程数是cpu的核数,也就是干活的人数

    #简写成for循环模拟6个任务执行
    for i in range(6):
        p.submit(task,i)  #submit只是负责往池子里面丢任务,刚开始2个人同时接客


#1.submit往里面丢任务干活的人就是你指定的ProcessPoolExecutor(2)后面的人数
#2.刚一造个进程池,立马给你预备2个人干活,无论你丢多少任务,干活的永远是那2个人(谁先完了腾出手再接下一个)
#线程池
def task(x):
    print('%s is running'%x)
    time.sleep(random.randint(2, 5))
    # return x**2

if __name__ == '__main__':
    # p=ProcessPoolExecutor(max_workers=2)
    p=ThreadPoolExecutor(20)   #默认不写开启的是CPU核数*5

    for i in range(25):
        p.submit(task,i)

猜你喜欢

转载自www.cnblogs.com/yangzhizong/p/9321369.html