Pool进程池

进程池的作用就是缓存

进程池与Process区别, 主进程不会等着进程池结束才结束,但是process创建子进程,

先创建进程放在那地方,什么时候用就给你一个进程,用完之后再还回来,增加进程的重复使用率。

进程池避免了重复创建进程的过程

但是 要注意当进程数很多的时候,一个进程执行一会,然后CPU在切换过来花费的时间更多

所以pool里面的进程数不是越多越好,要根据CPU的核数和压力测试来确定,压力测试比如10000个用户访问一个服务器,看能不能承受

from multiprocessing import Pool
import time
import os


def work1():
for i in range(4):
print("-----work1=%d-----"%i)

def work(num):
for i in range(4):
print("===pid=%d==num=%d"%(os.getpid(), num))


if __name__ == "__main__":
#表示进程池中对多有三个进程一起执行
pool =Pool(3)

for i in range(5):
print("----%d----"%i)
#向进程池添加任务
#如果添加的任务数量超过了 进程池中的个数的话,那么不会导致添加不进入
#添加到进程的任务 如果还没有被执行的话 那么此时 他们会等待进程池中的进程完成一个任务之后, 会自动的去用刚刚的那个进程 完成当前的新任务
pool.apply_async(work,(i,))
pool.apply_async(work1)
print("----%d----" % i)

pool.close()# 关闭进程池 相当于 不能够添加新任务了
pool.join()#如果没有join(), 会导致进程池中的任务不会执行,这也就解决了主进程不会等着子进程结束的问题在pool中

进程和进程池不同点:
对于Process来说,主进程结束后会等待子进程结束而结束
对Pool来说,主进程不会等待进程池结束而结束、需要加一个join()
def test():
# while True:
print("-----test-----")
#time.sleep(1)#切换进程用的

if __name__ == "__main__":
pool = Pool(3)
pool.apply_async(test)
pool.close()
print("----mian---")
result:
---mian---

def test():
# while True:
print("-----test-----")
#time.sleep(1)#切换进程用的

if __name__ == "__main__":
pool = Pool(3)
pool.apply_async(test)
pool.close()
pool.join()
print("----mian---")
result:

-----test-----
----mian---




posted @ 2021-07-06 17:02  狼太白  阅读(258)  评论(0编辑  收藏  举报