首页 > 系统服务 > 详细

(7)Pool进程池

时间:2019-04-28 22:30:58      阅读:146      评论:0      收藏:0      [点我收藏+]

(1)# 开启过多的进程并不一定提高你的效率

因为进程池可以实现并行的概念,比Process单核并发的速度要快

# 如果cpu负载任务过多,平均单个任务执行的效率就会低,反而降低执行速度.

1个人做4件事和4个人做4件事

显然后者执行速度更快,

前者是并发,后者是并行

利用进程池,可以开启cpu的并行效果

# apply 开启进程,同步阻塞,每次都要等待当前任务完成之后,在开启下一个

进程,apply是同步阻塞,每个进程必须执行完,才能在开启进程;

# apply_async 开启进程,异步非阻塞,(主进程 和 子进程异步)

注意:进程池不需要start来开启

(2)语法:from threading import Thread,Pool

注意:不用写target

p.apply(函数名,args=(参数)) 有返回值

p.apply_async(函数名=(参数)) 有返回值,是一个[对象.get()]获取

os.cpu_count() 获取cpu核心数

p = Pool(6)

(3)注意;两个要一起用

# 关闭进程池,用户不能在向这个池中创建子进程

p.close()

# 这里加阻塞,直到进程池中所有的子进程执行完毕

p.join()

 

(4) 进程池.map (与高阶函数map使用方法一样,只不过这个是并发版本)

def task(num):

time.sleep(1)

print("%s:%s"%(num,os.getpid()))

return num ** 2

if __name__ == "__main__":

p = Pool()

res = p.map(task,range(20)) #自动close和join

print(res)

结果[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]

 

 

 

 

 

 

 

 

 

 

 

 

 

(7)Pool进程池

原文:https://www.cnblogs.com/lyj910313/p/10787245.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!