学习笔记(34):Python网络编程并发编程-异步调用与回调机制
立即学习:https://edu.csdn.net/course/play/24458/296452?utm_source=blogtoedu
1.知识点:(详细见代码注释)
1)同步调用:
res1 = pool.submit(ju,'john1').result()
2)异步调用
pool.submit(ju,'john1')
3)二者区别
异步调用:只是提交了任务即可,不会在原地等待结果,马上运行下面的代码
同步调用:提交完任务后,在原地等待结果,等到结果后再执行后面的代码,代码运行的效果呈串行
4)异步回调机制
#回调机制:异步调用不会等待结果,但是也可获得结果,这里通过回调机制,来获得一个concurrent.futures对象,需要通过.result()来获得数据
5)同步与阻塞的区别
同步调用不管是I/O还是计算密集型都需要等待,而阻塞只有在I/O情况下才会发生
2.同步调用:同步调用不管是I/O还是计算密集型都需要等待,而阻塞只有在I/O情况下才会发生
#同步与异步调用都是提交任务的一种方式,以举重最例#同步调用:提交完任务后,在原地等待结果,等到结果后再执行后面的代码,代码运行的效果呈串行
from concurrent.futures import ProcessPoolExecutor
import time,random#创建函数模拟举重的任务
def ju(name):print('%s is juing'%name)#举重的时间time.sleep(random.randint(2,3))#举重的重量res = random.randint(4,8)return {'name':name,'res':res}#创建函数模拟提交举重结果的事件
def weight(response):name = response['name']size = response['res']print('%s 举重的重量是《%s》kg'%(name,size))if __name__ == '__main__':#创建进程池pool = ProcessPoolExecutor(5)#提交任务,此处使用同步调用result(),得到函数返回的结果res1 = pool.submit(ju,'john1').result()weight(res1)res2 = pool.submit(ju,'john2').result()weight(res2)res3 = pool.submit(ju,'john3').result()weight(res3)
同步调用结果
X:\Users\13711\AppData\Local\Programs\Python\Python37\python.exe C:/Users/jinlin/Desktop/python_further_study/并发编程/异步调用与回调机制.py
john1 is juing
john1 举重的重量是《7》kg
john2 is juing
john2 举重的重量是《8》kg
john3 is juing
john3 举重的重量是《7》kg进程已结束,退出代码0
2.异步调用
#异步调用:只是提交了任务即可,不会在原地等待结果,马上运行下面的代码
#回调机制:异步调用不会等待结果,但是也可获得结果,这里通过回调机制,来获得一个concurrent.futures对象,需要通过.result()来获得数据
from concurrent.futures import ProcessPoolExecutor
import time,random#创建函数模拟举重的任务
def ju(name):print('%s is juing'%name)#举重的时间time.sleep(random.randint(2,3))#举重的重量res = random.randint(4,8)return {'name':name,'res':res}#创建函数模拟提交举重结果的事件
def weight(response):response = response.result()name = response['name']size = response['res']print('%s 举重的重量是《%s》kg'%(name,size))if __name__ == '__main__':#创建进程池pool = ProcessPoolExecutor(5)#提交任务,此处使用异步调用,不得到函数返回的结果,使用回调函数add_done_callback(回调函数)来得到一个对象pool.submit(ju,'john1').add_done_callback(weight)pool.submit(ju,'john2').add_done_callback(weight)pool.submit(ju,'john3').add_done_callback(weight)
异步调用的结果
X:\Users\13711\AppData\Local\Programs\Python\Python37\python.exe C:/Users/jinlin/Desktop/python_further_study/并发编程/异步调用与回调机制.py
john1 is juing
john2 is juing
john3 is juing
john1 举重的重量是《5》kg
john2 举重的重量是《4》kg
john3 举重的重量是《5》kg进程已结束,退出代码0
学习笔记(34):Python网络编程并发编程-异步调用与回调机制相关推荐
- 并发编程 - 线程 - 1.线程queue/2.线程池进程池/3.异步调用与回调机制
1.线程queue :会有锁 q=queue.Queue(3) q.get() q.put() 先进先出 队列后进先出 堆栈优先级队列 1 """先进先出 队列" ...
- 学习笔记(19):Python网络编程并发编程-互斥锁
立即学习:https://edu.csdn.net/course/play/24458/296430?utm_source=blogtoedu 1.互斥锁: 多进程间的内存是相互隔离的,因此其数据也是 ...
- 学习笔记(33):Python网络编程并发编程-进程池线程池
立即学习:https://edu.csdn.net/course/play/24458/296451?utm_source=blogtoedu 进程池与线程池: 一般应用在网站上,进程池或线程池最大的 ...
- 学习笔记(28):Python网络编程并发编程-死锁与递归锁
立即学习:https://edu.csdn.net/course/play/24458/296445?utm_source=blogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只 ...
- 学习笔记(18):Python网络编程并发编程-守护进程
立即学习:https://edu.csdn.net/course/play/24458/296429?utm_source=blogtoedu 守护进程(了解) 1.概念:守护进程是主进程在创建子进程 ...
- 学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现
立即学习:https://edu.csdn.net/course/play/24458/296239?utm_source=blogtoedu 1.服务器端:接收客户端发送的命令,subprocess ...
- 学习笔记(08):Python网络编程并发编程-实现服务端可以对多个客户端提供服务
立即学习:https://edu.csdn.net/course/play/24458/296237?utm_source=blogtoedu 链接循环,一个服务器服务多个客户端, 思路1:服务器一个 ...
- python 网页爬虫作业调度_第3次作业-MOOC学习笔记:Python网络爬虫与信息提取
1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业. 4.提供图片或网站显示的学习 ...
- 学习笔记(06):Python网络编程并发编程-在简单套接字基础上加上通信循环
立即学习:https://edu.csdn.net/course/play/24458/296235?utm_source=blogtoedu 1.服务器端 #以打电话通讯为例子进行说明 #导入相应的 ...
最新文章
- 本地连接受限制或无连接的解决办法
- 本地服务器模板网站怎么安装,本地服务器怎样安装帝国CMS模版网站
- 使用VS2003创建WEB程序的时候出现AutoMation服务器不能创建对象错误
- 分布式事务seate-server的docker镜像的制作与部署
- 前端学习(2350):condition启动模式配置
- android中Intent的一些用法和总结
- android 移除泛型中元素_Android 代码混淆 混淆方案
- python简单实现文件上传/下载
- html网页中wmode,关于html:Quicktime-Wmode透明问题
- python opencv4.0 提取alpha 通道
- Wlan学习—无线网络安全
- 论微信朋友圈,巨头的解决之道
- 小程序上线发布后,实现版本自动更新,用户无感知
- 微信小程序云开发 把时间戳转换成正常的时间格式上传到数据库中
- 中国电影|嘉宝盘点近几年国内票房突破30亿的影片
- java调用word模板文件_Java使用模板导出word文档
- 应用交付工程师应该具备的关键能力(售前篇)
- 月份和星期的英语(请不要再弄错了)
- android 内嵌 数据库,安卓开发之嵌入式数据库sqlite的操作方法
- 看inux系统中的c语言编译器,Linux系统自定义安装C语言gcc编译器图文详细教程
热门文章
- [VMware WorkStation]虚拟机网络
- 【javascript】操作符:一元操作符
- 【C】——C项目中的菜单功能(源码)
- MAC 下配置JavaEE开发环境
- Asp.Net Core 工作单元 UnitOfWork UOW
- 20172311 2017-2018-2 《程序设计与数据结构》第八周学习总结
- Python_48re模块的sub方法
- Codechef Yet another cute girl
- [BZOJ] 1620: [Usaco2008 Nov]Time Management 时间管理
- 4源代码的下载和编译