python学习第三十二节(进程间通信、进程池、协程)
当多线程创建完毕之后,start并没有了立刻运行,依旧需要和其他线程抢CPU的资格,只是
时间很短。
进程之间的通信分为两种,queue和pipe
1 import multiprocessing 2 def foo(q): 3 q.put([1,'hello',True]) 4 if __name__=='__main__': 5 q=multiprocessing.Queue()#通过multiprocessing建立一个队列 6 p=multiprocessing.Process(target=foo,args=(q,)) 7 #用multiprocessing在调用Process,建立一个子进程,定义函数名,将q作为参数传到foo函数, 8 #foo函数就可以通过这个参数来与主进程做交互了。 9 p.start()#激活这个子进程 10 print(q.get())#主进程
上面函数通过multiprocessing的queue来实现进程间通信。
1 from multiprocessing import Pipe,Process 2 def foo(sk): 3 sk.send('hello world')#通过管道sk发送内容 4 print(sk.recv())#打印接收到的内容 5 if __name__ == '__main__': 6 sock,conn=Pipe()#定义一个管道的两头 7 p=Process(target=foo,args=(sock,))#由于上面已经通过multiprocessing导入了Process, 8 # 所以这里直接就可以创建一个子进程,并将sock(管道的一头)作为参数给foo函数 9 p.start()#激活这个进程 10 print(conn.recv())#打印接收到的内容,conn是管道的另一头 11 conn.send('hi son')#通过管道发送内容
上面代码通过Pipe来实现两个进程间的通信。
1 from multiprocessing import Manager,Process 2 def foo(l,i):#收到参数,l是Mlist,i是循环的i 3 l.append(i*i)#将i平方添加到Mlist 4 if __name__=='__main__': 5 manager=Manager() 6 Mlist=manager.list([11,22,33])#定义一个列表 7 8 l=[] 9 for i in range(5):#创建5个子进程 10 p=Process(target=foo,args=(Mlist,i))#定义一个进程,将Mlist和i作为参数传到foo 11 p.start()#激活这个进程,执行foo函数 12 l.append(p)#将5个进程添加到l这个列表 13 for i in l: 14 i.join()#循环这个列表,然后将每个进程join 15 print(Mlist)#当所有的子进程都结束,运行主进程
上面代码通过Manger实现子进程间的通信。
协程
协程,又叫微线程,实际上就是单线程,通过python语法,或模块来实现并发。
本质上就是一个进程一个线程。
上图是用yield实现了一个两个函数逇并发处理。
1 from greenlet import greenlet#导入这个模块 2 def foo():#定义一个函数 3 print('ok1')#打印 4 gr2.switch()#将程序切换到下面一个函数,按照名字切 5 print('ok3')#打印 6 gr2.switch()#将程序切换到下面一个函数,按照名字切 7 def bar(): 8 print('ok2')#打印 9 gr1.switch()#切到上面foo函数 10 print('ok4') 11 gr1=greenlet(foo)#实例化这个函数 12 gr2=greenlet(bar) 13 gr1.switch()#在外面写这个就执行了这个函数
通过greenlet模块的switch来实现协程的切换,greenlet模块需要手动去pycharm下载
1 import gevent#导入这个模块 2 def foo(): 3 print('running in foo') 4 gevent.sleep(2)#打印之后睡一秒,模拟io操作 5 print('switch to foo again') 6 def bar(): 7 print('switch to bar') 8 gevent.sleep(1)#打印之后睡一秒,模拟io操作 9 print('switch to bar again') 10 gevent.joinall([gevent.spawn(foo),gevent.spawn(bar)]) 11 ''' 12 这个程序的运行过程是,先执行foo函数, 13 打印之后遇到了IO操作,然后自动切换到下一个函数执行, 14 打印之后又遇到了IO操作,然后切回foo函数发现IO2秒还没有结束, 15 然后又切到了bar函数发现IO结束,打印,再切回foo函数打印 16 '''
上面代码通过gevent模块来实现写成的IO期间自动切换实现并发的程序。
gevent需要从pycharm下载。
转载于:https://www.cnblogs.com/ArmoredTitan/p/7212171.html
python学习第三十二节(进程间通信、进程池、协程)相关推荐
- Python之路,Day9 - 线程、进程、协程和IO多路复用
参考博客: 线程.进程.协程: http://www.cnblogs.com/wupeiqi/articles/5040827.html http://www.cnblogs.com/alex3714 ...
- python3多进程 进程池 协程并发
一.进程 我们电脑的应用程序,都是进程,进程是资源分配的单位.进程切换需要的资源最大,效率低. 进程之间相互独立 cpu密集的时候适合用多进程 #多进程并发 import multiprocessin ...
- Python菜鸟起飞day11_ 线程、进程、协程(一、多线程)
目录 一.概述 1.1.什么是进程(Processes)? 1.2.什么是线程(Threads)? 1.3.什么是协程(Coroutines)? 1.3.1.疑问 二.多线程 2.1.Threadin ...
- javaweb学习总结(三十九)——数据库连接池
javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10 ...
- Python学习笔记三之编程练习:循环、迭代器与函数
Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...
- SurfaceFlinger学习笔记(三)之SurfaceFlinger进程
概述 本系列是基于android Q 即android10 SurfaceFlinger学习笔记(一)应用启动流程 SurfaceFlinger学习笔记(二)之Surface SurfaceFling ...
- Python学习第三课-基本数据类型
Python学习第三课-基本数据类型 一.基本概念 1.1表达式 1.2语句 1.3程序 1.4函数 内置函数 自定义函数 参数 返回值 二.标识符 2.1 关键字 2.2标识符概念 驼峰命名法 下划 ...
- python学习(三)scrapy爬虫框架(二)——创建一个scrapy爬虫
在创建新的scrapy爬虫之前,我们需要先了解一下创建一个scrapy爬虫的基本步骤 第一步:确定要爬取的数据 以爬取豆瓣电影数据为例: 每部电影所要爬取的信息有: 片名:<头号玩家> 导 ...
- 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)——数据库连接池 一、应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要
孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对 ...
最新文章
- 内联式css样式,直接写在现有的HTML标签中
- 首个获得FDA批准的脑机接口设备:“突破性”脑机接口设备用于造福人类
- php的mpdf开发实例,mpdf自动分页加页码的方法
- python文件处理:每隔一定数目删除;文件重命名;删除多余xml文件;将文件夹线所有文件平均分配到其他文件夹
- 打开ADS提示23111@localhost后提示无法与执照伺服机连线,怎么解决?
- mysql删除不存在行数据报错_MySQL学习笔记11复制错误处理(二)删除不存在的行的问题...
- 关于 SAP Spartacus SSR 服务器返回的响应是否应该被缓存的问题
- 终于等到DUDU把MetaBlog Api打开了
- Qt:Qt实现飞秋拦截助手—介绍
- Navicat premiu的导入和导出
- 安卓应用安全指南 5.6.1 密码学 示例代码
- 又出问题 三星Galaxy S10被曝意外触摸保护功能无效
- python os模块进程管理
- matlab船舶静水力曲线,静水力曲线图
- 机器学习(周志华)知识点总结——第3章 线性模型(后期上传word/PDF)
- 【知识点总结】电机学——题目部分
- 微信小程序商城毕业设计毕设作品(4)开题报告
- CSDN/博客园复制代码空格报错问题解决
- 微信wifi服务器地址,从零开始改造路由器实现微信连WIFI的功能(七):更简单的认证服务器wifidog-server...
- ECSHOP全部品牌页实现分页换页功能方法
热门文章
- php domdocument getelementbyid,PHP DOMDocument- getElementByID添加Â代替空
- 指针常量与常量指针精解【一次掌握】
- iview select选中值取值_iView的Select选择框
- nacos 本地测试_Nacos集群配置实例(windows下测试)
- 【渝粤教育】国家开放大学2018年秋季 0267-21T摄影技术 参考试题
- 【渝粤教育】21秋期末考试工程项目管理10324k2
- 【渝粤教育】 国家开放大学2020年春季 2710蔬菜栽培技术 参考试题
- [渝粤教育] 西南科技大学 机械控制工程基础在线考试复习资料
- 【渝粤教育】电大中专电子商务网站建设与维护 (7)作业 题库
- 【渝粤题库】陕西师范大学700011 新课程改革与生物教材研究