(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()

# (1) 比较pool 和Process 执行速度
'''因为进程池可以实现并行的概念,比Process单核并发的速度要快'''
'''
import os,time
from multiprocessing import Pool,Process def func(num):
print("发了第%s封邮件" % (num)) if __name__ == "__main__":
# print(os.cpu_count()) # 获取cpu核心数量
start = time.time()
p = Pool(6) # 6核心
for i in range(100):
# apply_async 用来开启子进程
p.apply_async(func,args=(i,)) # 关闭进程池,用户不能在向这个池中创建子进程
p.close()
# 这里加阻塞,直到进程池中所有的子进程执行完毕
p.join()
end = time.time()
print(end-start) # 单核Process处理100件任务
start = time.time()
lst = []
for i in range(100):
p = Process(target=func,args= ( i ,))
p.start()
lst.append(p)
for p in lst:
p.join()
end = time.time()
print(end-start)
# 运行完,会发现,并行比单核并发快很多

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

import os
from multiprocessing import Process 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进程池的更多相关文章

  1. 运用pool进程池启动大量子进程

    # Pool进程池类 from multiprocessing import Pool import os import time import random def run(index): prin ...

  2. 0704 Process继承实现多进程、Pool进程池,进程间通过队列通信,Pool实现多进程实现复制文件

    通过继承的方式,实现Process多进程 from multiprocessing import Process import time class MyNewProcess(Process): de ...

  3. 多进程-Pool进程池

    from multiprocessing import Pool import os,time def Foo(i): time.sleep(2) print("in process&quo ...

  4. 结合Pool进程池进程,实现进程之间的通讯,稍微复杂的运用

    #进程池中的Queue """ 如果要用Pool创建进程,就需要multiprocessing.Manager()中的Queue() 而不是multiprocessing ...

  5. 进程同步控制(锁,信号量,事件), 进程通讯(队列和管道,生产者消费者模型) 数据共享(进程池和mutiprocess.Pool模块)

    参考博客 https://www.cnblogs.com/xiao987334176/p/9025072.html#autoid-1-1-0 进程同步(multiprocess.Lock.Semaph ...

  6. python学习笔记——multiprocessing 多进程组件 进程池Pool

    1 进程池Pool基本概述 在使用Python进行系统管理时,特别是同时操作多个文件目录或者远程控制多台主机,并行操作可以节约大量时间,如果操作的对象数目不大时,还可以直接适用Process类动态生成 ...

  7. Python 之并发编程之manager与进程池pool

    一.manager 常用的数据类型:dict list 能够实现进程之间的数据共享 进程之间如果同时修改一个数据,会导致数据冲突,因为并发的特征,导致数据更新不同步. def work(dic, lo ...

  8. 线程池、进程池(concurrent.futures模块)和协程

    一.线程池 1.concurrent.futures模块 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 Pro ...

  9. 2019-04-19-day036-协程与进程池

    内容回顾 11:30 码云 :王老师检查作业+定期抽查 注册账号 考试的时间 threading.enumerate(),能够获取到当前正在运行的所有线程对象列表 守护线程 守护线程会等待所有的非守护 ...

随机推荐

  1. 零基础Python爬虫实现(爬取最新电影排行)

    提示:本学习来自Ehco前辈的文章, 经过实现得出的笔记. 目标网站 http://dianying.2345.com/top/ 网站结构 要爬的部分,在ul标签下(包括li标签), 大致来说迭代li ...

  2. android之csv导出

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  3. Junit中的setUp()与setUpBefore(), tearDown()与tearDownAfterClass()解析

    @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static vo ...

  4. tp剩余未验证内容-5

    经过实践, ie678是不能正确显示解析bs的,所以要用ff和chrome浏览器. page-header类是有特殊样式的 在标题下有一条浅色的细线条,源代码中有: border-bottom: 1p ...

  5. yum命令showduplicates安装指定版本包

    默认情况下,我们用yum list 或者 yum install 的时候,yum会默认选择最新的版本. 如果我们需要安装指定版本的某个软件包,以使之能够和我们现有环境的软件包版本匹配,那么就需要用到s ...

  6. 深入了解JVW

    Java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时 ...

  7. UVA 10318 Security Panel(DFS剪枝 + 状压 + 思维)题解

    题意:给一个r*c的矩阵开关(初始全打开的),每次按下一个开关都会改变3*3范围内的有*的地方的状态,问你最少几步能让开关全闭上,按升序输出按哪些按钮 思路:每个按钮至多按一下,按按钮的顺序和结果无关 ...

  8. 【做题】CF196E. Opening Portals 排除无用边&最小生成树

    题意:给出一个有\(n\)个结点,\(m\)条边的连通无向图,边有边权,等于经过这条边所需的时间.有\(k\)个点设有传送门.一开始,所有传送门关闭.你从\(1\)号点出发,每当你到达一个有传送门的点 ...

  9. js插入排序

    插入排序 平均时间复杂度O(n*n) 最差情况O(n*n) 最好情况O(n) 空间复杂度O(1) 稳定性:稳定 function insertSort (arr) { var len = arr.le ...

  10. (转载)Unity里实现更换游戏对象材质球

    在unity中本来想实现在一个背景墙上更换图片的功能 在网上查了一些资料说是用Image,但我是新手小白刚接触Unity不久好多组建还不会用,就想能不能通过改变游戏对象的材质球来更换游戏对象的背景. ...